我有两个DateTime变量,beginTime和endTime.通过执行以下操作,我得到了它们的不同之处:
TimeSpan dateDifference = endTime.Subtract(beginTime);
Run Code Online (Sandbox Code Playgroud)
我现在如何使用C#以hh,mm mins,ss secs格式返回一串字符串.
如果差异是00:06:32.4458750
它应该返回00小时,06分钟,32秒
Pet*_*ter 173
我刚刚构建了一些TimeSpan Extension方法.以为我可以分享:
public static string ToReadableAgeString(this TimeSpan span)
{
return string.Format("{0:0}", span.Days / 365.25);
}
public static string ToReadableString(this TimeSpan span)
{
string formatted = string.Format("{0}{1}{2}{3}",
span.Duration().Days > 0 ? string.Format("{0:0} day{1}, ", span.Days, span.Days == 1 ? string.Empty : "s") : string.Empty,
span.Duration().Hours > 0 ? string.Format("{0:0} hour{1}, ", span.Hours, span.Hours == 1 ? string.Empty : "s") : string.Empty,
span.Duration().Minutes > 0 ? string.Format("{0:0} minute{1}, ", span.Minutes, span.Minutes == 1 ? string.Empty : "s") : string.Empty,
span.Duration().Seconds > 0 ? string.Format("{0:0} second{1}", span.Seconds, span.Seconds == 1 ? string.Empty : "s") : string.Empty);
if (formatted.EndsWith(", ")) formatted = formatted.Substring(0, formatted.Length - 2);
if (string.IsNullOrEmpty(formatted)) formatted = "0 seconds";
return formatted;
}
Run Code Online (Sandbox Code Playgroud)
vdb*_*oor 121
通过将其转换为日期时间,您可以获得本地化格式:
new DateTime(timeSpan.Ticks).ToString("HH:mm");
Run Code Online (Sandbox Code Playgroud)
小智 94
这是最短的解决方案.
timeSpan.ToString(@"hh\:mm");
Run Code Online (Sandbox Code Playgroud)
And*_*ndy 40
将TimeSpan.ToString()做的伎俩适合你?如果没有,看起来该页面上的代码示例描述了如何自定义TimeSpan
对象的格式.
GBe*_*gen 32
使用带有多个参数的String.Format().
using System;
namespace TimeSpanFormat
{
class Program
{
static void Main(string[] args)
{
TimeSpan dateDifference = new TimeSpan(0, 0, 6, 32, 445);
string formattedTimeSpan = string.Format("{0:D2} hrs, {1:D2} mins, {2:D2} secs", dateDifference.Hours, dateDifference.Minutes, dateDifference.Seconds);
Console.WriteLine(formattedTimeSpan);
}
}
}
Run Code Online (Sandbox Code Playgroud)
格式化a的最简单方法TimeSpan
是将其添加到a DateTime
并格式化:
string formatted = (DateTime.Today + dateDifference).ToString("HH 'hrs' mm 'mins' ss 'secs'");
Run Code Online (Sandbox Code Playgroud)
只要时差不超过24小时,这就有效.
该Today
属性返回DateTime
时间组件为零的值,因此结果的时间组件是TimeSpan
值.
public static class TimeSpanFormattingExtensions
{
public static string ToReadableString(this TimeSpan span)
{
return string.Join(", ", span.GetReadableStringElements()
.Where(str => !string.IsNullOrWhiteSpace(str)));
}
private static IEnumerable<string> GetReadableStringElements(this TimeSpan span)
{
yield return GetDaysString((int)Math.Floor(span.TotalDays));
yield return GetHoursString(span.Hours);
yield return GetMinutesString(span.Minutes);
yield return GetSecondsString(span.Seconds);
}
private static string GetDaysString(int days)
{
if (days == 0)
return string.Empty;
if (days == 1)
return "1 day";
return string.Format("{0:0} days", days);
}
private static string GetHoursString(int hours)
{
if (hours == 0)
return string.Empty;
if (hours == 1)
return "1 hour";
return string.Format("{0:0} hours", hours);
}
private static string GetMinutesString(int minutes)
{
if (minutes == 0)
return string.Empty;
if (minutes == 1)
return "1 minute";
return string.Format("{0:0} minutes", minutes);
}
private static string GetSecondsString(int seconds)
{
if (seconds == 0)
return string.Empty;
if (seconds == 1)
return "1 second";
return string.Format("{0:0} seconds", seconds);
}
}
Run Code Online (Sandbox Code Playgroud)
根据Microsoft文档,TimeSpan结构将Hours,Minutes,Seconds和Milliseconds作为整数成员公开.也许你想要的东西:
dateDifference.Hours.ToString() + " hrs, " + dateDifference.Minutes.ToString() + " mins, " + dateDifference.Seconds.ToString() + " secs"
Run Code Online (Sandbox Code Playgroud)
感谢彼得提供的扩展方法。我修改了它以更好地处理更长的时间跨度:
namespace ExtensionMethods
{
public static class TimeSpanExtensionMethods
{
public static string ToReadableString(this TimeSpan span)
{
string formatted = string.Format("{0}{1}{2}",
(span.Days / 7) > 0 ? string.Format("{0:0} weeks, ", span.Days / 7) : string.Empty,
span.Days % 7 > 0 ? string.Format("{0:0} days, ", span.Days % 7) : string.Empty,
span.Hours > 0 ? string.Format("{0:0} hours, ", span.Hours) : string.Empty);
if (formatted.EndsWith(", ")) formatted = formatted.Substring(0, formatted.Length - 2);
return formatted;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码。
public static class TimeSpanExtensions
{
public static String Verbose(this TimeSpan timeSpan)
{
var hours = timeSpan.Hours;
var minutes = timeSpan.Minutes;
if (hours > 0) return String.Format("{0} hours {1} minutes", hours, minutes);
return String.Format("{0} minutes", minutes);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
250170 次 |
最近记录: |