-1

我的程序不仅要能够比较 us style 与 us style format ,还要比较 us style (mm/dd/yyyy)vs non us style (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)
4

3 回答 3

1

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

System.DateTime是格式不可知的,独立的和不知道的。所以你可以比较它的任何两个实例。

于 2013-09-25T20:36:24.400 回答
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);
于 2013-09-25T20:40:50.933 回答
0

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

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

可以通过 LCID 识别培养物。你可以在这里找到一份清单。

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

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。

于 2013-09-25T20:44:51.427 回答