দ্রুততম উপায় কী তা দেখার জন্য আমি কিছু মানদণ্ড করেছি এবং এগুলি আমার ফলাফল এবং উপসংহার। আমি প্রতিটি পদ্ধতি 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
।
using System;
ক্লাসে থাকেSystem.TimeSpan
।