对于所有语言的所有程序员,我觉得这个问题非常普遍。 这有点模糊。首先,有区域设置,其中包含文化信息和其他内容。我相信这些语言环境对象还在Unicode标准中封装了有关日期和时间格式的信息,即如何显示日期。像这样,例如:“yyyy-MM-dd'T'HH:mm:ssZ”。每个国家/地区都可能拥有自己的日期和时间格式规则,因此我们都非常满意当地的应用,我们的应用用户可以将日期+时间格式化为其所在地区的常规格式。
但是现在,真的很难看。有日历。不同的日历。公主在美国和欧洲以及其他一些国家,但也有希伯来语,犹太人和穆斯林日历等等。现在,这些日历当然是不同的。他们将一年的时间段划分为不同长度的单位,有些可能有13个月,其他可能只有月相而不是星期一,星期二,星期三等等。我真的不知道,但我知道有些人对于习惯公历的人来说显得很奇怪。
但现在模糊的事情:谁确实影响日期+时间格式?现场?日历系统?都?并且区域设置通常会告诉您使用哪个日历系统吗?日历系统如何影响区域设置并反转?
我几乎整天都在搜索这个话题,看起来很难像一块巨大的砖块。
答案 0 :(得分:2)
在典型的操作系统中,将有按国际惯例使用格里高利历的日期例程。
区域设置将决定日期信息的格式以及使用哪种语言。
这不会停止使用独立于操作系统日期功能的其他日历系统,但国际商务是否要求我们就共同日历达成一致?
答案 1 :(得分:1)
用户可能来自他喜欢使用特定日历系统的某个区域,但由于他位于远程工作网站或其他任何地方,他的区域设置不同。
如果需要防弹日历格式,人们需要解决其他数百个此类案例。
答案 2 :(得分:0)
我将尝试解释它在.Net framewrk中的工作原理
存储在DateTime变量中的值是特定日期以来的刻度数。这与使用的日历无关。即今天将具有相同的价值,无论日历如何。
文化包含有关打印日期时要使用的格式字符串和日历的信息。
当您要求系统格式化字符串时,它将首先执行以下操作:
int year = culture.Calendar.GetYear(dt);
int month = culture.Calendar.GetMonth(dt);
int day = culture.Calendar.GetDay(dt);
年份将是2009年的格里高利历,但其他日历则为其他日历。
之后,格式字符串用于以正确的顺序输出值等。
因此,以下代码不会使用希伯来语语言环境输出正确的ISO日期。
dt.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
正确的方法是
dt.ToString("yyyy-MM-dd'T'HH:mm:ssZ", CultureInfo.InvariantCulture);
或
dt.ToString("s");
后者有效,因为框架会自动忽略“s”格式说明符(以及其他一些)的文化。