日期的格式是否取决于用户的区域设置和日历系统?

时间:2009-08-29 13:45:01

标签: datetime date time calendar locale

对于所有语言的所有程序员,我觉得这个问题非常普遍。 这有点模糊。首先,有区域设置,其中包含文化信息和其他内容。我相信这些语言环境对象还在Unicode标准中封装了有关日期和时间格式的信息,即如何显示日期。像这样,例如:“yyyy-MM-dd'T'HH:mm:ssZ”。每个国家/地区都可能拥有自己的日期和时间格式规则,因此我们都非常满意当地的应用,我们的应用用户可以将日期+时间格式化为其所在地区的常规格式。

但是现在,真的很难看。有日历。不同的日历。公主在美国和欧洲以及其他一些国家,但也有希伯来语,犹太人和穆斯林日历等等。现在,这些日历当然是不同的。他们将一年的时间段划分为不同长度的单位,有些可能有13个月,其他可能只有月相而不是星期一,星期二,星期三等等。我真的不知道,但我知道有些人对于习惯公历的人来说显得很奇怪。

但现在模糊的事情:谁确实影响日期+时间格式?现场?日历系统?都?并且区域设置通常会告诉您使用哪个日历系统吗?日历系统如何影响区域设置并反转?

我几乎整天都在搜索这个话题,看起来很难像一块巨大的砖块。

3 个答案:

答案 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”格式说明符(以及其他一些)的文化。

相关问题