美国与非美国日期时间格式

时间:2013-09-25 20:29:37

标签: c# datetime datetime-format

我的程序必须能够不仅比较我们的风格与我们的风格格式,还能比较我们的风格(mm/dd/yyyy)与非美国风格(dd/mm/yyyy)。怎么做?到目前为止,这就是我所拥有的,它只能用于比较相同的风格:

DateTime my_dt = new DateTime(); // this can be mm/dd or dd/mm
                                 // depending on where it run
DateTime new_dt = Convert.ToDateTime(us_dt);
int compare = DateTime.Compare(new_dt, my_dt);

当my_dt为dd / mm时,我收到错误:

System.FormatException: String was not recognized as a valid DateTime.
   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at update.Program.Process(String ftp_path, String action)

3 个答案:

答案 0 :(得分:1)

格式是日期时间字符串表示的属性,即dt.ToString("mm/dd/yyyy")

System.DateTime格式不可知,独立且不知情。所以你可以比较它的任何两个等值。

答案 1 :(得分:1)

比较DateTime对象不是真正的问题,而是解析。鉴于您在此处有2种严格格式,即dd/mm/yyyymm/dd/yyyy,以下内容应该有效

DateTime my_dt = null;
// parse in either US/Non-US format (culture-independant)
DateTime.ParseExact(someDateStr, new[] { "dd/MM/yyyy", "MM/dd/yyyy" }, CultureInfo.InvariantCulture, DateTimeStyles.None out my_dt);
// parse in US format (culture-dependant)
DateTime dt = DateTime.Parse(result3, new CultureInfo("en-US"));
// compare the results
int compare = DateTime.Compare(my_dt, result3);

答案 2 :(得分:0)

你的问题并没有真正说明我认为你的实际问题。我猜你有两个不同文化格式的日期字符串,你想比较它们。

首先,您需要了解字符串的文化或格式,否则您可能会产生不可预测的结果。

文化可以通过LCID识别。您可以找到列表here

因此,假设您有一个英语(美国)日期字符串和一个英语(加拿大)字符串,您可以这样比较它们:

string americanDateString = "12/31/2013";
string canadianDateString = "31/12/2013";

DateTime americanDate = DateTime.Parse(americanDateString, System.Globalization.CultureInfo.GetCultureInfo(1033); // 1033 = English - United States culture code

DateTime canadianDate = DateTime.Parse(canadianDateString, System.Globalization.CultureInfo.GetCultureInfo(4105); // 4105= English - Canada culture code

int compare = DateTime.Compare(americanDate, canadianDate);

编辑:您还可以使用区域设置短字符串(例如“en-US”或“en-CA”)按照abatishchev的答案查找CultureInfo。