我的程序必须能够不仅比较我们的风格与我们的风格格式,还能比较我们的风格(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)
答案 0 :(得分:1)
格式是日期时间字符串表示的属性,即dt.ToString("mm/dd/yyyy")
。
System.DateTime
格式不可知,独立且不知情。所以你可以比较它的任何两个等值。
答案 1 :(得分:1)
比较DateTime
对象不是真正的问题,而是解析。鉴于您在此处有2种严格格式,即dd/mm/yyyy
或mm/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。