使用当前区域性定义的 12 或 24 小时格式从 DateTime 获取一天中的小时
.Net 具有内置的用于 DateTime 的 ToShortTimeString() 函数,该函数使用 CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern 格式。对于 en-US,它返回类似这样的内容:“5:00 pm”。对于 24 小时文化(例如 de-DE),它将返回“17:00”。
我想要的是一种只返回适用于每种文化的小时(即上述情况下的“下午 5 点”和“17 点”)的方法。最好/最干净的方法是什么?
谢谢!
.Net has the built in ToShortTimeString() function for DateTime that uses the CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern format. It returns something like this for en-US: "5:00 pm". For a 24 hour culture such as de-DE it would return "17:00".
What I want is a way to just return just the hour (So "5 pm" and "17" in the cases above) that works with every culture. What's the best/cleanest way to do this?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用 DateTime.ToString() 并提供您想要的格式作为参数。
you may use DateTime.ToString() and provide format tyou want as an argument.
呃,我本来不想感兴趣,但现在我感兴趣了!下面的代码尊重所有文化,将 AM/PM 指示符呈现在正确的位置,并识别 24 小时格式,所有这些都取决于文化。
基本上,此静态扩展方法被重载以获取当前区域性(无参数)或指定的区域性。
DateTime.Now.ToTimeString()
DateTime.Now.ToTimeString(someCultureInfo)
代码如下,包括示例程序:
Ugh, I didn't want to be interested but now I am! Here's the code which respects all cultures and renders the AM/PM designators in the correct position, as well as recognizing 24-hour format, all depending on the culture.
Basically, this static extension method is overloaded to take the current culture (no parameters) or a specified culture.
DateTime.Now.ToTimeString()
DateTime.Now.ToTimeString(someCultureInfo)
Code is below, includes sample program:
Sam 的编辑:
这是证明这不起作用的代码。
Sam's edit:
Here's code to prove this doesn't work.
尝试使用 DateTime.Hour 属性。
Try using DateTime.Hour property.
我会检查 CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern 是否包含“h”、“hh”、“H”、“HH”、“t”或“tt”以及按什么顺序,然后构建您自己的自定义格式来自那些的字符串。
例如
然后使用 .ToString( ),传入您构建的字符串。
示例代码 - 这基本上删除了除 t、T、h、H 和多个空格之外的所有内容。但是,正如下面指出的,只有一串“H”可能会失败......
I would check to see whether CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern contains "h", "hh", "H", "HH", "t" or "tt", and in what order, and then build your own custom format string from those.
e.g.
Then use .ToString(), passing in the string you built.
Example code - this basically strips out everything that's not t, T, h, H, and multiple spaces. But, as pointed out below, just a string of "H" could fail...
使用这个:
Use this: