Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 美国与非美国日期时间格式_C#_Datetime_Datetime Format - Fatal编程技术网

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

C# 美国与非美国日期时间格式,c#,datetime,datetime-format,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.ToDa

我的程序不仅要能够比较美国风格和美国风格的格式,还要能够比较美国风格的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);
当我的_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)

格式是日期时间字符串表示的属性,即dt.ToStringmm/dd/yyyy

System.DateTime的格式是不可知的、独立的和不知道的。因此,您可以比较它的任意两个属性。

比较DateTime对象不是真正的问题,而是解析问题。考虑到这里有两种严格的格式,即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);

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

首先,您需要知道字符串的区域性或格式,否则可能会产生不可预测的结果

可通过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。

为什么每个新程序员总是使用Convert.ToSomthing而不是Somthing.Parse方法?当我知道字符串的区域性并且它不等于当前应用程序区域性时,您的问题是如何解析DateTime?样式是在解析过程中使用,而不是比较您的问题是什么?DateTime是DateTime是DateTime-它没有格式和样式-它只有8字节的数据。这意味着:一旦你有了DateTime类型的变量,比较它们就完全独立于任何字符串格式——你只是比较两个DateTime值。首先,你需要知道字符串的区域性——不是真的,你需要的只是格式。一旦你有了它,并且它是一致的,当然,你可以以一种独立于文化的方式进行解析。@James如果你可以假设所有的日期都是相同的格式,那就对了。虽然如果你遇到了一个不同格式的日期,比如2013年12月31日,那么ParseExact将失败。是的,因此评论是一致的,当然:这实际上归结为你希望对数据有多灵活。对我来说,最好始终保持一致,因此选择一种格式并坚持使用它通常UTC最有效。@JohnRyann此代码将运行在从.NET 2.0到.System.FormatException:字符串未被识别为有效的日期时间。在System.DateTimeParse.ParseString s,DateTimeFormatInfo dtfi,DateTimeStyles样式在update.Program.ProcessString ftp_路径,字符串操作