সেকেন্ডে (আওয়ার: মিনিটস: সেকেন্ডস: মিলিসেকেন্ডস) সময় রূপান্তর করার সর্বোত্তম উপায় কী?


290

সেকেন্ডে (আওয়ার: মিনিটস: সেকেন্ডস: মিলিসেকেন্ডস) সময় রূপান্তর করার সর্বোত্তম উপায় কী?

ধরা যাক আমার ৮০ সেকেন্ড আছে, .NET- তে কি কোনও বিশেষ শ্রেণি / কৌশল আছে যা আমাকে সেই ৮০ সেকেন্ডকে (00h: 00m: 00s: 00ms) ফর্ম্যাটকে ডেটটাইম বা অন্য কিছুতে রূপান্তর করতে দেয়?

উত্তর:


565

নেট <= 4.0 এর জন্য টাইমস্প্যান ক্লাসটি ব্যবহার করুন।

TimeSpan t = TimeSpan.FromSeconds( secs );

string answer = string.Format("{0:D2}h:{1:D2}m:{2:D2}s:{3:D3}ms", 
                t.Hours, 
                t.Minutes, 
                t.Seconds, 
                t.Milliseconds);

(ইন্দার কুমার রাঠোর দ্বারা উল্লিখিত হিসাবে)। নেট> 4.0 এর জন্য আপনি ব্যবহার করতে পারেন

TimeSpan time = TimeSpan.FromSeconds(seconds);

//here backslash is must to tell that colon is
//not the part of format, it just a character that we want in output
string str = time .ToString(@"hh\:mm\:ss\:fff");

(নিক মলিনিক্স থেকে) নিশ্চিত করুন যে TimeSpan.MaxValue.TotalSecondsব্যতিক্রম এড়ানোর চেয়ে সেকেন্ড কম ।


using System;ক্লাসে থাকে System.TimeSpan
fbmd

61

জন্য .NET> 4.0 আপনি ব্যবহার করতে পারেন

TimeSpan time = TimeSpan.FromSeconds(seconds);

//here backslash is must to tell that colon is
//not the part of format, it just a character that we want in output
string str = time .ToString(@"hh\:mm\:ss\:fff");

অথবা আপনি যদি তারিখের সময় বিন্যাস চান তবে আপনি এটিও করতে পারেন

TimeSpan time = TimeSpan.FromSeconds(seconds);
DateTime dateTime = DateTime.Today.Add(time);
string displayTime = dateTime.ToString("hh:mm:tt");

আরও জন্য আপনি কাস্টম টাইমস্প্যান ফর্ম্যাট স্ট্রিং পরীক্ষা করতে পারেন check


2
ডেটটাইমটিতে সেকেন্ড যোগ করার জন্য আপনার টাইমস্প্যানের দরকার নেই। শুধু ডেটটাইম.এডসেকেন্ডস () ব্যবহার করুন।
এভেজেনি নবোকভ

@ মেহেদী দেহঘানি ২৪ ঘন্টা ফর্ম্যাটের জন্য আপনি 'এইচএইচ' এর পরিবর্তে 'এইচএইচ' ব্যবহার করতে হবে
ইন্দার কুমার রাঠোর

@ ইন্দারকুমার রাঠোর আমি আপনার প্রথম সমাধান সম্পর্কে বলছিলাম, HHসেখানে অবৈধ।
মেহেদী দেহঘানি

@ মেহেদী দেহঘানি আপনি কি দয়া করে ভুল করতে পেরেছেন কারণ 3 বছর হয়েছে আমি কোড করেছিলাম না.NET/C#
ইন্দ্র কুমার রাঠোর

1
@ ইন্দারকুমাররাঠোর .ToString(@"hh\:mm\:ss\:fff");ইতিমধ্যে 24hrফর্ম্যাটে রয়েছে। HHএই জাতীয় ইনপুট সহ সেখানে বৈধ নয় ( ত্রুটিটি হ'লInput string was not in a correct format. )
মেহেদী দেহঘানি

23

আপনি যদি জানেন যে আপনার কাছে বেশ কয়েক সেকেন্ড রয়েছে, আপনি টাইমস্প্যানকে কল করে একটি টাইমস্প্যান মান তৈরি করতে পারেন romফর্মসেকেন্ডগুলি:

 TimeSpan ts = TimeSpan.FromSeconds(80);

তারপরে আপনি দিন, ঘন্টা, মিনিট বা সেকেন্ডের সংখ্যা পেতে পারেন। বা আপনার পছন্দ মতো যে কোনও পদ্ধতিতে আউটপুট করতে একটি টস্ট্রিং ওভারলোড ব্যবহার করুন।


16

দ্রুততম উপায় কী তা দেখার জন্য আমি কিছু মানদণ্ড করেছি এবং এগুলি আমার ফলাফল এবং উপসংহার। আমি প্রতিটি পদ্ধতি 10M বার দৌড়েছি এবং রান প্রতি গড় সময় সহ একটি মন্তব্য যুক্ত করেছি।

যদি আপনার ইনপুট মিলিসেকেন্ডগুলি একদিনের মধ্যে সীমাবদ্ধ না থাকে (আপনার ফলাফল হতে পারে 143: 59: 59.999), দ্রুত থেকে ধীর গতিতে এই বিকল্পগুলি:

// 0.86 ms
static string Method1(int millisecs)
{
    int hours = millisecs / 3600000;
    int mins = (millisecs % 3600000) / 60000;
    // Make sure you use the appropriate decimal separator
    return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}", hours, mins, millisecs % 60000 / 1000, millisecs % 1000);
}

// 0.89 ms
static string Method2(int millisecs)
{
    double s = millisecs % 60000 / 1000.0;
    millisecs /= 60000;
    int mins = millisecs % 60;
    int hours = millisecs / 60;
    return string.Format("{0:D2}:{1:D2}:{2:00.000}", hours, mins, s);
}

// 0.95 ms
static string Method3(int millisecs)
{
    TimeSpan t = TimeSpan.FromMilliseconds(millisecs);
    // Make sure you use the appropriate decimal separator
    return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}",
        (int)t.TotalHours,
        t.Minutes,
        t.Seconds,
        t.Milliseconds);
}

যদি আপনার ইনপুট মিলিসেকেন্ডগুলি এক দিনের মধ্যে সীমাবদ্ধ থাকে (তবে আপনার ফলাফলটি 23: 59: 59.999 এর পরে আর বেশি হবে না), দ্রুত থেকে ধীর গতিতে এই বিকল্পগুলি:

// 0.58 ms
static string Method5(int millisecs)
{
    // Fastest way to create a DateTime at midnight
    // Make sure you use the appropriate decimal separator
    return DateTime.FromBinary(599266080000000000).AddMilliseconds(millisecs).ToString("HH:mm:ss.fff");
}

// 0.59 ms
static string Method4(int millisecs)
{
    // Make sure you use the appropriate decimal separator
    return TimeSpan.FromMilliseconds(millisecs).ToString(@"hh\:mm\:ss\.fff");
}

// 0.93 ms
static string Method6(int millisecs)
{
    TimeSpan t = TimeSpan.FromMilliseconds(millisecs);
    // Make sure you use the appropriate decimal separator
    return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}",
        t.Hours,
        t.Minutes,
        t.Seconds,
        t.Milliseconds);
}

আপনার ইনপুটটি মাত্র কয়েক সেকেন্ডের ক্ষেত্রে , পদ্ধতিগুলি কিছুটা দ্রুত। আবার, যদি আপনার ইনপুট সেকেন্ডগুলি এক দিনের মধ্যে সীমাবদ্ধ না থাকে (আপনার ফলাফল হতে পারে 143: 59: 59):

// 0.63 ms
static string Method1(int secs)
{
    int hours = secs / 3600;
    int mins = (secs % 3600) / 60;
    secs = secs % 60;
    return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, secs);
}

// 0.64 ms
static string Method2(int secs)
{
    int s = secs % 60;
    secs /= 60;
    int mins = secs % 60;
    int hours = secs / 60;
    return string.Format("{0:D2}:{1:D2}:{2:D2}", hours, mins, s);
}

// 0.70 ms
static string Method3(int secs)
{
    TimeSpan t = TimeSpan.FromSeconds(secs);
    return string.Format("{0:D2}:{1:D2}:{2:D2}",
        (int)t.TotalHours,
        t.Minutes,
        t.Seconds);
}

এবং যদি আপনার ইনপুট সেকেন্ডগুলি এক দিনের মধ্যে সীমাবদ্ধ থাকে (আপনার ফলাফল আর কখনও বড় হবে না 23:59:59):

// 0.33 ms
static string Method5(int secs)
{
    // Fastest way to create a DateTime at midnight
    return DateTime.FromBinary(599266080000000000).AddSeconds(secs).ToString("HH:mm:ss");
}

// 0.34 ms
static string Method4(int secs)
{
    return TimeSpan.FromSeconds(secs).ToString(@"hh\:mm\:ss");
}

// 0.70 ms
static string Method6(int secs)
{
    TimeSpan t = TimeSpan.FromSeconds(secs);
    return string.Format("{0:D2}:{1:D2}:{2:D2}",
        t.Hours,
        t.Minutes,
        t.Seconds);
}

চূড়ান্ত মন্তব্য হিসাবে, আমাকে যোগ করতে দাও যে আমি লক্ষ্য করেছি যে string.Formatএটির D2পরিবর্তে আপনি যদি ব্যবহার করেন তবে এটি কিছুটা দ্রুত 00



8

টাইমস্প্যান নির্মাতা আপনাকে কয়েক সেকেন্ডের মধ্যে পাস করতে দেয়। সেকেন্ডের টাইমস্প্যান পরিমাণ টাইপের একটি ভেরিয়েবলটি কেবল ঘোষণা করুন। উদা:

TimeSpan span = new TimeSpan(0, 0, 500);
span.ToString();

4

আমি আপনাকে এর TimeSpanজন্য ক্লাসটি ব্যবহার করার পরামর্শ দিচ্ছি ।

public static void Main(string[] args)
{
    TimeSpan t = TimeSpan.FromSeconds(80);
    Console.WriteLine(t.ToString());

    t = TimeSpan.FromSeconds(868693412);
    Console.WriteLine(t.ToString());
}

আউটপুট:

00:01:20
10054.07:43:32

4

ভিবি.এনইটি তে তবে এটি সি # তে সমান:

Dim x As New TimeSpan(0, 0, 80)
debug.print(x.ToString())
' Will print 00:01:20

2

জন্য .NET <4.0 : (প্রাক্তন ইউনিটি ) আপনি আছে একটি এক্সটেনশন পদ্ধতি লিখতে পারেন TimeSpan.ToString(string format)মত আচরণ 4.0 .NET>

public static class TimeSpanExtensions
{
    public static string ToString(this TimeSpan time, string format)
    {
        DateTime dateTime = DateTime.Today.Add(time);
        return dateTime.ToString(format);
    }
}

এবং আপনার কোডের যে কোনও জায়গা থেকে আপনি এটি ব্যবহার করতে পারেন:

var time = TimeSpan.FromSeconds(timeElapsed);

string formattedDate = time.ToString("hh:mm:ss:fff");

এইভাবে আপনি TimeSpanআপনার কোডের যে কোনও জায়গা থেকে টসস্ট্রিংকে কল করে যে কোনও বস্তুকে ফর্ম্যাট করতে পারেন ।


1

আমাদের যদি ডেটটাইম থাকে তবে কেন লোকদের টাইমস্প্যান এবং ডেটটাইম দরকার ? অ্যাডসেকেন্ডস ()?

var dt = new DateTime(2015, 1, 1).AddSeconds(totalSeconds);

তারিখটি নির্বিচারে। টোটাল সেকেন্ডগুলি 59 এর চেয়ে বেশি হতে পারে এবং এটি একটি ডাবল। তারপরে আপনি ডেটটাইম.ToString () ব্যবহার করতে চাইলে আপনার সময় ফর্ম্যাট করতে পারেন:

dt.ToString("H:mm:ss");

টোটাল সেকেন্ড <0 বা> 59: এটি কাজ করে না

new DateTime(2015, 1, 1, 0, 0, totalSeconds)

0
private string ConvertTime(double miliSeconds)
{
    var timeSpan = TimeSpan.FromMilliseconds(totalMiliSeconds);
    // Converts the total miliseconds to the human readable time format
    return timeSpan.ToString(@"hh\:mm\:ss\:fff");
}

// টেস্ট

    [TestCase(1002, "00:00:01:002")]
    [TestCase(700011, "00:11:40:011")]
    [TestCase(113879834, "07:37:59:834")]
    public void ConvertTime_ResturnsCorrectString(double totalMiliSeconds, string expectedMessage)
    {
        // Arrange
        var obj = new Class();;

        // Act
        var resultMessage = obj.ConvertTime(totalMiliSeconds);

        // Assert
        Assert.AreEqual(expectedMessage, resultMessage);
    }

3
১. ওপি মিলিসেকেন্ড নয়, সেকেন্ড থেকে রূপান্তর চেয়েছিল। ২. বর্তমানে গৃহীত উত্তরের চেয়ে আপনার উত্তরটি কেমন?
ভাসান

0

মোট সেকেন্ড পেতে

var i = TimeSpan.FromTicks(startDate.Ticks).TotalSeconds;

এবং সেকেন্ড থেকে তারিখের সময় পেতে

var thatDateTime = new DateTime().AddSeconds(i)

0

এটি hh: mm: ss ফর্ম্যাটে ফিরে আসবে

 public static string ConvertTime(long secs)
    {
        TimeSpan ts = TimeSpan.FromSeconds(secs);
        string displayTime = $"{ts.Hours}:{ts.Minutes}:{ts.Seconds}";
        return displayTime;
    }

আপনার অবশ্যই এটি পরীক্ষা করা উচিত নয়। ConvertTime(80)রিটার্ন 0:1:20এবং ConvertTime(61)রিটার্ন 0:1:1, উভয়ই h:m:s। স্ট্রিং ইন্টারপোলেশন ToString()ব্যবহারের ফলে অন্যান্য উত্তরগুলির মতো লম্বা কোডও আসে এবং ফর্ম্যাট করা স্ট্রিংয়ের দৈর্ঘ্যটি কল্পনা করা আরও শক্ত করে তোলে।
বেকন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.