উত্তর:
দয়া করে নোট করুন: এই উত্তরটি। নেট 4.0 এবং তারপরের জন্য। আপনি নেট। 3.5 বা নীচে একটি টাইমস্প্যান ফর্ম্যাট করতে চান দয়া করে জোহানেসএইচ এর উত্তর দেখুন ।
নেট নেট Time.০ এ কাস্টম টাইমস্প্যান ফর্ম্যাট স্ট্রিংগুলি চালু করা হয়েছিল। আপনি এমএসডিএন কাস্টম টাইমস্প্যান ফর্ম্যাট স্ট্রিং পৃষ্ঠায় উপলভ্য ফর্ম্যাট স্পেসিফায়ারের পুরো রেফারেন্সটি পেতে পারেন ।
এখানে টাইমস্প্যান ফর্ম্যাট স্ট্রিংয়ের একটি উদাহরণ রয়েছে:
string.Format("{0:hh\\:mm\\:ss}", myTimeSpan); //example output 15:36:15
( আপডেট ) এবং এখানে সি # 6 স্ট্রিং ইন্টারপোলেশন ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
আপনাকে ":" অক্ষরটি "\" দিয়ে পালাতে হবে (যা আপনি নিজে ভারব্যাটিম স্ট্রিং ব্যবহার না করা অবধি এড়াতে হবে)।
এমএসডিএন কাস্টম টাইমস্প্যান ফর্ম্যাট স্ট্রিং পৃষ্ঠাগুলির এই অংশটি ":" এবং "পালানোর বিষয়ে ব্যাখ্যা করে। একটি ফর্ম্যাট স্ট্রিং অক্ষর:
কাস্টম টাইমস্প্যান ফর্ম্যাট স্পেসিফায়ারগুলিতে স্থানধারক বিভাজক চিহ্নগুলি অন্তর্ভুক্ত নয়, যেমন প্রতীকগুলি কয়েক ঘন্টা, মিনিট থেকে কয়েক ঘন্টা বা ভগ্নাংশের সেকেন্ড থেকে কয়েক সেকেন্ডের মধ্যে পৃথক হয়। পরিবর্তে, এই চিহ্নগুলি স্ট্রিং আক্ষরিক হিসাবে কাস্টম ফর্ম্যাট স্ট্রিংয়ের মধ্যে অন্তর্ভুক্ত করা উচিত। উদাহরণস্বরূপ, "dd.hh: মিমি" একটি সময়কাল (।) কে দিন এবং ঘন্টাগুলির মধ্যে বিভাজক হিসাবে এবং একটি কোলন (:) কে ঘন্টা এবং মিনিটের মধ্যে বিভাজক হিসাবে সংজ্ঞায়িত করে।
myTimeSpan = new TimeSpan(15, 35, 54);
বিবৃতিটির একটি ইনপুট দিয়ে myTimeSpan .ToString("hh\\mm\\ss");
ফলাফল হবে 15m35s54
। আমি মনে করি না এটি আপনি যা চেয়েছিলেন তা আপনার ঘন্টা খানেক পরে এবং কয়েক মিনিটের পরে একটি গুলি স্থাপন করবে s
$"{myTimeSpan.TotalHours}:{myTimeSpan:mm\\:ss}"
। ব্যবহারকারীর দৃষ্টিকোণ থেকে, দিনগুলি আউটপুট করা আরও ভাল হতে পারে, 200+ ঘন্টার মধ্যে কত দিন মানসিকভাবে কেউ জানতে চায় না।
.NET 3.5 এবং নিম্নের জন্য আপনি ব্যবহার করতে পারেন:
string.Format ("{0:00}:{1:00}:{2:00}",
(int)myTimeSpan.TotalHours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
কোড একটি জন স্কিট থেকে নেওয়া উত্তর বাইট উপর
.NET 4.0 এবং তারপরের জন্য ডক্টা জোনজ উত্তরটি দেখুন ।
একটি উপায় হ'ল একটি DateTime
বিষয় তৈরি করা এবং এটি ফর্ম্যাটের জন্য ব্যবহার করুন:
new DateTime(myTimeSpan.Ticks).ToString(myCustomFormat)
// or using String.Format:
String.Format("{0:HHmmss}", new DateTime(myTimeSpan.Ticks))
এইভাবেই আমি জানি। আমি আশা করি কেউ আরও ভাল উপায় প্রস্তাব করতে পারেন।
সহজ। TimeSpan.ToString
সি, জি বা জি ব্যবহার করুন। এমএসডিএন- এ আরও তথ্য
আমি সাথে যেতে হবে
myTimeSpan.ToString("hh\\:mm\\:ss");
Dim duration As New TimeSpan(1, 12, 23, 62)
DEBUG.WriteLine("Time of Travel: " + duration.ToString("dd\.hh\:mm\:ss"))
এটি ফ্রেমওয়ার্ক 4 এর জন্য কাজ করে
ব্যক্তিগতভাবে, আমি এই পদ্ধতির পছন্দ করি:
TimeSpan ts = ...;
string.Format("{0:%d}d {0:%h}h {0:%m}m {0:%s}s", ts);
কোনও সমস্যা ছাড়াই আপনি নিজের পছন্দ মতো এটি তৈরি করতে পারেন:
string.Format("{0:%d}days {0:%h}hours {0:%m}min {0:%s}sec", ts);
string.Format("{0:%d}d {0:%h}h {0:%m}' {0:%s}''", ts);
এটি দুর্দান্ত একটি:
string.Format("{0:00}:{1:00}:{2:00}",
(int)myTimeSpan.TotalHours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
আপনি এর সাথে যেতে পারেন:
Dim ts As New TimeSpan(35, 21, 59, 59) '(11, 22, 30, 30) '
Dim TimeStr1 As String = String.Format("{0:c}", ts)
Dim TimeStr2 As String = New Date(ts.Ticks).ToString("dd.HH:mm:ss")
সম্পাদনা করুন:
আপনি স্ট্রিংস.ফর্ম্যাট দেখতে পারেন ।
Dim ts As New TimeSpan(23, 30, 59)
Dim str As String = Strings.Format(New DateTime(ts.Ticks), "H:mm:ss")
if (timeSpan.TotalDays < 1)
return timeSpan.ToString(@"hh\:mm\:ss");
return timeSpan.TotalDays < 2
? timeSpan.ToString(@"d\ \d\a\y\ hh\:mm\:ss")
: timeSpan.ToString(@"d\ \d\a\y\s\ hh\:mm\:ss");
সমস্ত আক্ষরিক অক্ষর এড়াতে হবে।
আমি নীচের কোডটি ব্যবহার করেছি। এটি দীর্ঘ, তবে তবুও এটি একটি অভিব্যক্তি, এবং খুব বন্ধুত্বপূর্ণ আউটপুট উত্পাদন করে, কারণ এটি শূন্যের মান থাকলে তাদের দিন, ঘন্টা, মিনিট বা সেকেন্ড আউটপুট দেয় না।
নমুনায় এটি আউটপুট উত্পাদন করে: "4 দিন 1 ঘন্টা 3 সেকেন্ড"।
TimeSpan sp = new TimeSpan(4,1,0,3);
string.Format("{0}{1}{2}{3}",
sp.Days > 0 ? ( sp.Days > 1 ? sp.ToString(@"d\ \d\a\y\s\ "): sp.ToString(@"d\ \d\a\y\ ")):string.Empty,
sp.Hours > 0 ? (sp.Hours > 1 ? sp.ToString(@"h\ \h\o\u\r\s\ ") : sp.ToString(@"h\ \h\o\u\r\ ")):string.Empty,
sp.Minutes > 0 ? (sp.Minutes > 1 ? sp.ToString(@"m\ \m\i\n\u\t\e\s\ ") :sp.ToString(@"m\ \m\i\n\u\t\e\ ")):string.Empty,
sp.Seconds > 0 ? (sp.Seconds > 1 ? sp.ToString(@"s\ \s\e\c\o\n\d\s"): sp.ToString(@"s\ \s\e\c\o\n\d\s")):string.Empty);
String timeComponent(int value, String name) { return value > 0 ? value + " " + name + (value > 1 ? "s" : ""); }
প্রতিটি উপাদান (যেমন timeComponent(sp.Days, "day")
) এর জন্য কল করুন , তারপরে String.join
স্পেসগুলি সন্নিবেশ করানোর জন্য ব্যবহার করুন ।
আমি এই পদ্ধতিটি ব্যবহার করি। আমি বেলজিয়াম এবং ডাচ বলতে তাই বহু ঘন্টা এবং মিনিটের বহুবচন কেবল শেষের দিকে 's' যোগ করে না তবে একবচন থেকে প্রায় আলাদা শব্দ।
এটি দীর্ঘ মনে হতে পারে তবে এটি আমার মনে হয় খুব পঠনযোগ্য:
public static string SpanToReadableTime(TimeSpan span)
{
string[] values = new string[4]; //4 slots: days, hours, minutes, seconds
StringBuilder readableTime = new StringBuilder();
if (span.Days > 0)
{
if (span.Days == 1)
values[0] = span.Days.ToString() + " dag"; //day
else
values[0] = span.Days.ToString() + " dagen"; //days
readableTime.Append(values[0]);
readableTime.Append(", ");
}
else
values[0] = String.Empty;
if (span.Hours > 0)
{
if (span.Hours == 1)
values[1] = span.Hours.ToString() + " uur"; //hour
else
values[1] = span.Hours.ToString() + " uren"; //hours
readableTime.Append(values[1]);
readableTime.Append(", ");
}
else
values[1] = string.Empty;
if (span.Minutes > 0)
{
if (span.Minutes == 1)
values[2] = span.Minutes.ToString() + " minuut"; //minute
else
values[2] = span.Minutes.ToString() + " minuten"; //minutes
readableTime.Append(values[2]);
readableTime.Append(", ");
}
else
values[2] = string.Empty;
if (span.Seconds > 0)
{
if (span.Seconds == 1)
values[3] = span.Seconds.ToString() + " seconde"; //second
else
values[3] = span.Seconds.ToString() + " seconden"; //seconds
readableTime.Append(values[3]);
}
else
values[3] = string.Empty;
return readableTime.ToString();
}//end SpanToReadableTime
শর্তসাপেক্ষ বিন্যাসের সাথে আমি নিজের স্ব ব্যবহার করলাম এটিই। এবং আমি এটি এখানে পোস্ট করি কারণ আমি মনে করি এটি পরিষ্কার উপায়।
$"{time.Days:#0:;;\\}{time.Hours:#0:;;\\}{time.Minutes:00:}{time.Seconds:00}"
আউটপুট উদাহরণ:
00:00
(সর্বনিম্ন)
1:43:04
(যখন আমাদের ঘন্টা থাকে)
15:03:01
(যখন ঘন্টাগুলি 1 ডিজিটের বেশি হয়)
2:4:22:04
(যখন আমাদের দিন আছে))
ফর্ম্যাট করা সহজ। time.Days:#0:;;\\
পূর্বে বিন্যাসটি ;;
যখন মান ধনাত্মক হয় for নেতিবাচক মান অগ্রাহ্য করা হয়। এবং শূন্য মানের জন্য ;;\\
এটি ফর্ম্যাট স্ট্রিং এ আড়াল করার জন্য আমাদের আছে । মনে রাখবেন যে পালানো ব্যাকস্ল্যাশ প্রয়োজনীয়, অন্যথায় এটি সঠিকভাবে ফর্ম্যাট হবে না।
আমার এক্সটেনশন পদ্ধতিটি এখানে :
public static string ToFormattedString(this TimeSpan ts)
{
const string separator = ", ";
if (ts.TotalMilliseconds < 1) { return "No time"; }
return string.Join(separator, new string[]
{
ts.Days > 0 ? ts.Days + (ts.Days > 1 ? " days" : " day") : null,
ts.Hours > 0 ? ts.Hours + (ts.Hours > 1 ? " hours" : " hour") : null,
ts.Minutes > 0 ? ts.Minutes + (ts.Minutes > 1 ? " minutes" : " minute") : null,
ts.Seconds > 0 ? ts.Seconds + (ts.Seconds > 1 ? " seconds" : " second") : null,
ts.Milliseconds > 0 ? ts.Milliseconds + (ts.Milliseconds > 1 ? " milliseconds" : " millisecond") : null,
}.Where(t => t != null));
}
উদাহরণ কল:
string time = new TimeSpan(3, 14, 15, 0, 65).ToFormattedString();
আউটপুট:
3 days, 14 hours, 15 minutes, 65 milliseconds
এটি ভিএস ২০১০ এর একটি ব্যথা, এখানে আমার কাজের সমাধান solution
public string DurationString
{
get
{
if (this.Duration.TotalHours < 24)
return new DateTime(this.Duration.Ticks).ToString("HH:mm");
else //If duration is more than 24 hours
{
double totalminutes = this.Duration.TotalMinutes;
double hours = totalminutes / 60;
double minutes = this.Duration.TotalMinutes - (Math.Floor(hours) * 60);
string result = string.Format("{0}:{1}", Math.Floor(hours).ToString("00"), Math.Floor(minutes).ToString("00"));
return result;
}
}
}
এখানে আমার সংস্করণ। এটি কেবলমাত্র প্রয়োজনীয় হিসাবে দেখায়, বহুবচন পরিচালনা করে, নেতিবাচক, এবং আমি এটিকে হালকা করে তোলার চেষ্টা করেছি।
0 seconds
1.404 seconds
1 hour, 14.4 seconds
14 hours, 57 minutes, 22.473 seconds
1 day, 14 hours, 57 minutes, 22.475 seconds
public static class TimeSpanExtensions
{
public static string ToReadableString(this TimeSpan timeSpan)
{
int days = (int)(timeSpan.Ticks / TimeSpan.TicksPerDay);
long subDayTicks = timeSpan.Ticks % TimeSpan.TicksPerDay;
bool isNegative = false;
if (timeSpan.Ticks < 0L)
{
isNegative = true;
days = -days;
subDayTicks = -subDayTicks;
}
int hours = (int)((subDayTicks / TimeSpan.TicksPerHour) % 24L);
int minutes = (int)((subDayTicks / TimeSpan.TicksPerMinute) % 60L);
int seconds = (int)((subDayTicks / TimeSpan.TicksPerSecond) % 60L);
int subSecondTicks = (int)(subDayTicks % TimeSpan.TicksPerSecond);
double fractionalSeconds = (double)subSecondTicks / TimeSpan.TicksPerSecond;
var parts = new List<string>(4);
if (days > 0)
parts.Add(string.Format("{0} day{1}", days, days == 1 ? null : "s"));
if (hours > 0)
parts.Add(string.Format("{0} hour{1}", hours, hours == 1 ? null : "s"));
if (minutes > 0)
parts.Add(string.Format("{0} minute{1}", minutes, minutes == 1 ? null : "s"));
if (fractionalSeconds.Equals(0D))
{
switch (seconds)
{
case 0:
// Only write "0 seconds" if we haven't written anything at all.
if (parts.Count == 0)
parts.Add("0 seconds");
break;
case 1:
parts.Add("1 second");
break;
default:
parts.Add(seconds + " seconds");
break;
}
}
else
{
parts.Add(string.Format("{0}{1:.###} seconds", seconds, fractionalSeconds));
}
string resultString = string.Join(", ", parts);
return isNegative ? "(negative) " + resultString : resultString;
}
}
আপনি যদি সেকেন্ডের সংখ্যার ভিত্তিতে সময়কালীন ফর্ম্যাটটি ইউটিউবের মতো করতে চান
int[] duration = { 0, 4, 40, 59, 60, 61, 400, 4000, 40000, 400000 };
foreach (int d in duration)
{
Console.WriteLine("{0, 6} -> {1, 10}", d, d > 59 ? TimeSpan.FromSeconds(d).ToString().TrimStart("00:".ToCharArray()) : string.Format("0:{0:00}", d));
}
আউটপুট:
0 -> 0:00
4 -> 0:04
40 -> 0:40
59 -> 0:59
60 -> 1:00
61 -> 1:01
400 -> 6:40
4000 -> 1:06:40
40000 -> 11:06:40
400000 -> 4.15:06:40
আমি "1 দিন 2 ঘন্টা 3 মিনিট" এর মতো স্ট্রিংটি ফিরে আসতে চেয়েছিলাম এবং উদাহরণস্বরূপ দিনগুলি বা মিনিট 0 হয় এবং তারপরে সেগুলি প্রদর্শন না করে তাও বিবেচনায় নিতে পারি। জন রাশকে তার উত্তরের জন্য ধন্যবাদ যা আমার সবেমাত্র একটি এক্সটেনশন
TimeSpan timeLeft = New Timespan(0, 70, 0);
String.Format("{0}{1}{2}{3}{4}{5}",
Math.Floor(timeLeft.TotalDays) == 0 ? "" :
Math.Floor(timeLeft.TotalDays).ToString() + " ",
Math.Floor(timeLeft.TotalDays) == 0 ? "" : Math.Floor(timeLeft.TotalDays) == 1 ? "day " : "days ",
timeLeft.Hours == 0 ? "" : timeLeft.Hours.ToString() + " ",
timeLeft.Hours == 0 ? "" : timeLeft.Hours == 1 ? "hour " : "hours ",
timeLeft.Minutes == 0 ? "" : timeLeft.Minutes.ToString() + " ",
timeLeft.Minutes == 0 ? "" : timeLeft.Minutes == 1 ? "minute " : "minutes ");