2

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

但现在,真正丑陋的部分。有日历。不同的日历。公历与美国、欧洲和其他一些国家类似,但也有希伯来、犹太和穆斯林日历等等。现在,这些日历当然是不同的。他们将一年的时间段划分为不同长度的单位,有些可能有 13 个月,有些可能只有月相,而不是星期一、星期二、星期三等。我真的不知道,但我知道其中一些对于习惯了公历的人来说似乎很奇怪。

但现在模糊的事情是:谁真正影响日期+时间格式?语言环境?日历系统?两个都?语言环境通常会告诉使用哪种日历系统吗?日历系统如何影响语言环境和反转?

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

4

3 回答 3

2

在典型的操作系统中,将有使用国际惯例使用公历的日期例程。

语言环境将决定日期信息的格式以及语言。

这不会阻止独立于操作系统日期功能的其他日历系统的使用,但是国际商务不要求我们就通用日历达成一致吗?

于 2009-08-29T13:54:57.140 回答
1

用户可能来自他喜欢使用某个日历系统的一个区域,但由于位于远程工作站点或其他任何地方,他的区域设置不同。

如果人们需要防弹日历格式,还有数百个类似的情况需要解决。

于 2009-08-29T13:49:22.637 回答
0

我将尝试解释它在 .Net 框架中的工作原理

DateTime 变量中存储的值是自特定日期以来的刻度数。这与使用的日历无关。即无论日历如何,今天都将具有相同的值。

文化包含有关格式字符串和打印日期时使用的日历的信息。

当您要求系统格式化字符串时,它首先会执行以下操作:

int year = culture.Calendar.GetYear(dt);
int month = culture.Calendar.GetMonth(dt);
int day = culture.Calendar.GetDay(dt);

year 在公历中将是 2009 年,但在其他日历中则为 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”格式说明符(以及其他一些)的文化。

于 2009-08-29T19:51:11.473 回答