我有时间跨度的数据,例如14:00:00,我想将其转换为12小时格式,2:00 PM,我用Google搜索,发现在计算器和MSDN相关的东西,但没”解决这个问题,任何人都可以帮助我吗?提前致谢。如何将24小时格式TimeSpan转换为12小时格式TimeSpan?表示为24小时格式
更新 看来,它可能24小时制时间跨度转换为字符串,但不可能将字符串转换为12小时制时间跨度:(
但我仍然有这么多好的答案,谢谢!
我有时间跨度的数据,例如14:00:00,我想将其转换为12小时格式,2:00 PM,我用Google搜索,发现在计算器和MSDN相关的东西,但没”解决这个问题,任何人都可以帮助我吗?提前致谢。如何将24小时格式TimeSpan转换为12小时格式TimeSpan?表示为24小时格式
更新 看来,它可能24小时制时间跨度转换为字符串,但不可能将字符串转换为12小时制时间跨度:(
但我仍然有这么多好的答案,谢谢!
实际上'TimeSpan'非常适合代表一天中的某个时间,只要您确定TotalDays <1'即可。运算符重载允许您轻松地计算特定日期事件的'DateTime'和给定'TimeSpan'代表一天中的时间。此外'DateTime.TimeOfDay'将返回一个'TimeSpan'。 – 2012-04-12 13:58:46
许多好的观点,虽然需要稍微改变时间表示的思维方式。令人困惑的是,认为'DateTime'类型返回代表一天中的某个时间可能具有实际跨越_multiple days_的值(尽管在逻辑上从不会)。 – 2012-04-12 14:04:48
假设你是ST在24小时的范围内阿英,你可以达到你想要的东西通过从今天的DateTime
负TimeSpan
(或与此有关的任何日期),然后剥去日期部分:
DateTime dt = DateTime.Today;
dt.Subtract(-TimeSpan.FromHours(14)).ToShortTimeString();
产量:
2 :00 PM
TimeSpan
代表一个时间间隔(时间差), 不是日期或时间,所以用24或12h格式定义它是没有意义的。我假设你真的想要一个DateTime
。
例如今天下午2点的:
TimeSpan ts = TimeSpan.FromHours(14);
DateTime dt = DateTime.Today.Add(ts);
然后你就可以格式化日期,只要你想:
String formatted = String.Format("{0:d/M/yyyy hh:mm:ss}", dt); // "12.4.1012 02:00:00" - german (de-DE)
http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.100%29.aspx
您需要将时间跨度转换为DateTime对象第一,然后使用任何你需要的DateTime format:
var t = DateTime.Now.TimeOfDay;
Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));
ToShortTimeString()
也将工作,但这样就不会正确显示(或正确的,这取决于你怎么看它)在非美国系统是区域的设置有关。
您需要在ToString调用中指定'CultureInfo.InvariantCulture'类似'CultureInfo.InvariantCulture'来避免当前文化使用24小时时间格式(在这种情况下,格式说明符'tt'插入空字符串)时出现问题。 – 2012-04-12 14:06:36
String formatted = yourDateTimeValue.ToString("hh:mm:ss tt");
试试这个代码:
int timezone = 0;
此字符串给出的12小时格式
string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");
此字符串给出24小时格式
string time = DateTime.Now.AddHours(-timezone).ToString("HH:mm:ss tt");
(加我在单个答案中分散评论。)
首先你要明白,TimeSpan
代表的时间间隔。该时间间隔被内部表示为蜱一个不是字符串14:00:00
也不字符串2:00 PM
的计数。只有当您将TimeSpan
转换为字符串时,才有意义讨论两个不同的字符串表示形式。从一种表示切换到另一种表示不会更改或转换TimeSpan
中存储的滴答计数。
写作时间为2:00 PM
而不是14:00:00
是关于日期/时间格式和文化。这一切都由DateTime
类处理。
但是,即使TimeSpan
表示一个时间间隔,它非常适合于表示一天中的时间(DateTime.TimeOfDay
返回TimeSpan
)。因此,为此目的使用它并非不合理。
要执行所描述的格式化,您需要依靠DateTime
的格式化逻辑或简单地创建自己的格式代码。
使用DateTime
:
var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001
var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
使用ToString
的格式说明记录了Custom Date and Time Format Strings页面上MSDN上。指定使用所需AM/PM指示符的CultureInfo
非常重要。否则,tt
格式说明符可能会被空字符串替换。
使用自定义格式:
var hours = timeSpan.Hours;
var minutes = timeSpan.Minutes;
var amPmDesignator = "AM";
if (hours == 0)
hours = 12;
else if (hours == 12)
amPmDesignator = "PM";
else if (hours > 12) {
hours -= 12;
amPmDesignator = "PM";
}
var formattedTime =
String.Format("{0}:{1:00} {2}", hours, minutes, amPmDesignator);
诚然,这种解决方案比第一种方法更复杂了不少。
哇...如此详细的答案,2解决方案,并在MSDN上自定义格式教程...非常感谢! – user1108069 2012-04-12 15:17:05
这个解决方案帮助了我最好的。我的格式化时间变量如下所示: 'var formattedTime = String.Format(“{0} {1}”,hours,amPmDesignator);' – 2017-02-08 16:59:45
你能否提供你的代码..了解你的问题.. – vikrantx 2012-04-12 12:21:26
它不是很清楚你能否详细说明一下。 Timespan不是绝对的时间,所以你不能在AM/PM中表示它。所以14:00:00并不是Timespan,它只是以这种格式存储在字符串变量中的时间? – 2012-04-12 12:22:59
这[链接](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)将帮助 – vikrantx 2012-04-12 12:26:26