सेकंड को घंटे में बदलने का सबसे अच्छा तरीका क्या है (घंटा: मिनट: सेकंड: मिलीसेकंड) समय?


290

सेकंड को घंटे में बदलने का सबसे अच्छा तरीका क्या है (घंटा: मिनट: सेकंड: मिलीसेकंड) समय?

मान लीजिए कि मेरे पास 80 सेकंड हैं, क्या .NET में कोई विशेष कक्षाएं / तकनीकें हैं जो मुझे उन 80 सेकंड को (00h: 00m: 00s: 00ms) फॉर्मेट में डेटटाइम या कुछ और की तरह बदलने की अनुमति देंगी?

जवाबों:


565

के लिए नेट <= 4.0 उपयोग TimeSpan वर्ग।

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);

(जैसा कि इंद्र कुमार राठौर ने नोट किया है) .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.MaxValue.TotalSecondsअपवाद से बचने के लिए सेकंड कम है।


using System;कक्षा में रहता है System.TimeSpan
fbmd

61

के लिए नेट> 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");

अधिक के लिए आप कस्टम टाइमस्पैन प्रारूप स्ट्रिंग्स की जांच कर सकते हैं


2
DateTime में सेकंड जोड़ने के लिए आपको TimeSpan की आवश्यकता नहीं है। बस DateTime.AddSeconds () का उपयोग करें।
इवगेनी नाबोकोव

@MehDDehagani 210 प्रारूप के लिए आपको 'hh' के बजाय 'HH' का उपयोग करना है
Inder Kumar Rathore

@ InderKumarRathore मैं आपके पहले समाधान के बारे में बात कर रहा था, HHवहाँ अमान्य है।
मेहदी देघानी 18

@MehDDehagani क्या आप इसमें गलत हो सकते हैं क्योंकि यह 3yrs का है जिसे मैंने कोड नहीं किया है.NET/C#
इंद्र कुमार राठौर

1
@ InderKumarRathore .ToString(@"hh\:mm\:ss\:fff");पहले से ही 24hrप्रारूप में है। HHवहाँ इस तरह के इनपुट ( त्रुटिInput string was not in a correct format. ) के साथ मान्य नहीं है
मेहदी देहनागी

23

यदि आप जानते हैं कि आपके पास कुछ सेकंड हैं, तो आप TimeSpan को फोन करके TimeSpan मान बना सकते हैं।

 TimeSpan ts = TimeSpan.FromSeconds(80);

फिर आप दिन, घंटे, मिनट या सेकंड की संख्या प्राप्त कर सकते हैं। या जो कुछ भी आपको पसंद है उसे आउटपुट करने के लिए ToString ओवरलोड में से एक का उपयोग करें।


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 कंस्ट्रक्टर आपको सेकंड में पास करने की अनुमति देता है। बस सेकंड के प्रकार TimeSpan राशि के एक चर घोषित। उदाहरण के लिए:

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

VB.NET में, लेकिन यह C # में समान है:

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

2

के लिए नेट <4.0 : (उदा एकता ) आप के लिए एक विस्तार विधि लिख सकते हैं TimeSpan.ToString(string format)की तरह व्यवहार 4.0 नेट>

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

अगर हमारे पास DateTime.AddSeconds () है तो लोगों को TimeSpan और DateTime की आवश्यकता क्यों है ?

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

तारीख मनमानी है। टोटल सेकंड 59 से अधिक हो सकता है और यह एक डबल है। तब आप अपना समय फॉर्मेट कर सकते हैं जैसा आप DateTime.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
1. ओपी ने सेकंड से रूपांतरण के लिए कहा, मिलीसेकंड से नहीं। 2. वर्तमान में स्वीकृत उत्तर की तुलना में आपका उत्तर कैसे है?
vesan

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()करने से अन्य उत्तरों की तरह लंबे समय तक कोड में भी परिणाम होता है, और यह भी स्वरूपित स्ट्रिंग लंबाई की कल्पना करना कठिन बनाता है।
BACON
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.