【发布时间】:2016-02-05 12:13:00
【问题描述】:
我有 DateTimes 列表,并且我想以某种格式获取 DateTime 以显示小时分钟秒。例如,我有来自 en-US 文化的 2015 年 12 月 22 日下午 4:32,如果我使用 bg-BG 则返回 16:32 22 Декември (意思是 12 月)2015。好吧是返回 4:32 22 Декември 2015。
这是我的简单代码。
List<DateTime> xAxises = SetListOfDateTimes();
var culture = Thread.CurrentThread.CurrentCulture;
for (int i = 1; i <= xAxises.Count; i++)
{
string someTime = xAxises.ElementAt(i - 1).ToString("hh:mm:ss tt", Thread.CurrentThread.CurrentCulture = culture);
string anotherTime = xAxises.ElementAt(i - 1).ToString("ddd, dd MMMM hh:mm:ss tt", Thread.CurrentThread.CurrentCulture = culture);
string thirdTime = xAxises.ElementAt(i - 1).ToString("dd MMMM yyyy", Thread.CurrentThread.CurrentCulture = culture);
string fourthTime = xAxises.ElementAt(i - 1).ToString("MMMM yyyy", Thread.CurrentThread.CurrentCulture = culture);
}
我真正的问题是我很少有使用 bg-BG 格式的 DateTimes 并且在someTime 中以 en-US 格式返回。当DateTime 是 21:22:30 时,someTime 是 9:22:30。我想在 21:22:30。我放了tt,因为如果是en-US 中的文化,我的申请可能会在美国使用。
任何知道如何正确返回当前文化的 DateTime 的人。
【问题讨论】:
-
你能更好地解释你所看到的吗?文化只有在你打电话给
.ToString(...)时才会发挥作用,DateTime 本身并没有文化。你看过NodaTime吗? -
这个问题没有多大意义。 DateTime 值没有任何格式或文化。它们是二进制值,而不是字符串。另一方面,在格式化或解析 时使用的文化是当前文化。请发布代码,显示您尝试了什么、您期望什么以及您得到了什么。您发布的内容与不传递任何文化基本相同
-
顺便说一句,默认情况下没有文化使用 24 小时。我怀疑问题不在于文化,而在于自定义格式
-
@PanagiotisKanavos - 大胆断言,我们在德国有 24 小时制。事实上,我想,12 小时制主要用于英语国家。
-
@EvgeniVelikovevelikov 请确保您系统的文化 是 BG 或发布更改文化的代码。如果您的文化是 BG,您将获得
14:53,例如DateTime.Now.ToString("t"),或5.2.2016 г. 14:51:55获得DateTime.Now.ToString()。但是,如果您已将开发机器设置为英语语言环境,则需要输入DateTime.Now.ToString("t",new System.Globalization.CultureInfo("bg-BG"))