2013-09-25 85 views
-1

我的程序必须能够比较我们的风格和我们的风格格式,但我们的风格(mm/dd/yyyy) vs非美式(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) 
+5

为什么每个新程序员总是使用'Convert.ToSomthing('而不是'Somthing.Parse('方法?) –

+1

是你的问题“如何解析DateTime,当我知道文化的字符串(并且它不是当前的应用文化)“? –

+3

样式在解析过程中使用,而不是比较 – Kubik

回答

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); 
+0

我正在使用.NET3.5 –

+0

@JohnRyann此代码将运行于.NET 2.0以上的所有内容中。 – James

+0

System.FormatException:String was未被识别为有效的日期时间。 at System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles样式) at update.Program.Process(String ftp_path,String action) –

1

格式为datetime字符串表示的属性,即dt.ToString("mm/dd/yyyy")

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

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。

+0

“*首先,您需要知道字符串的文化*” - 不是真的,所有你需要的是格式。一旦你有了,并且当然是一致的,你可以用文化*独立*的方式进行解析。 – James

+0

@詹姆斯如果你可以假定所有的日期都是相同的格式,那么这是真的。虽然如果遇到格式不同的日期,例如“2013年12月31日”,那么ParseExact将会失败。 –

+0

是的,因此评论“*,它当然是一致的*”:)它真正归结为你想要与你的数据有多灵活。对我而言,最好保持一致,所以选择一种格式并坚持下来(通常UTC效果最好)。 – James