C# 将字符串转换为其他区域性中的日期
我试图将表示不变量区域性中日期的字符串转换为给定区域性中的日期时间。问题是,当日期转换为德国文化时,日期变为月份,月份变为日期。 下面的代码有什么问题,或者我遗漏了什么C# 将字符串转换为其他区域性中的日期,c#,datetime,C#,Datetime,我试图将表示不变量区域性中日期的字符串转换为给定区域性中的日期时间。问题是,当日期转换为德国文化时,日期变为月份,月份变为日期。 下面的代码有什么问题,或者我遗漏了什么 var day = 11; var month = 12; var year = 2014; var someDate = new DateTime(year, month, day); var theDay = someDate.Day;//11 ok as expected var theMonth = someDate.
var day = 11; var month = 12; var year = 2014;
var someDate = new DateTime(year, month, day);
var theDay = someDate.Day;//11 ok as expected
var theMonth = someDate.Month; //12 ok as expected
var dateString = someDate.ToString(CultureInfo.InvariantCulture);
var date1 = DateTime.Parse(dateString, CultureInfo.GetCultureInfo("de-De"));
var day1 = date1.Day;//12 this should be 11 ?
var month1 = date1.Month; //11 this should be 12 ?
更改以下行并再次测试:
var dateString = someDate.ToString(CultureInfo.InvariantCulture);
致:
或:
我猜de-de-culture没有标准的日期和时间格式,如MM/dd/yyyy HH:MM:ss
由于将方法用于,结果字符串将是MM/dd/yyyy HH:MM:ss,表示不变量区域性
因此,dateString将为2014年11月12日00:00:00,反文化消除没有标准的日期和时间格式MM/dd/yyyy HH:MM:ss,但有dd/MM/yyyy HH:MM:ss,即dd.MM.YYYYYY HH:MM:ss用于反文化消除
这就是为什么方法匹配的模式是dd/MM/yyyy HH:MM:ss,因为它是。它应该是dd.MM.yyyy HH:MM:ss格式
这就是为什么它将你的12解析为一天,11解析为一个月
如果你已经有了一个DateTime,而你刚刚使用了.ToString方法来消除文化差异
var culture = new CultureInfo("de-De");
var dateString = someDate.ToString(culture);
var culture = new CultureInfo("de-De");
foreach (var format in culture.DateTimeFormat.GetAllDateTimePatterns())
{
Console.WriteLine(format);
}
记住,日期时间没有任何隐含的格式或区域性。它只有日期和时间值。它们的字符串表示可以有格式
顺便说一下,你可以找到你喜欢的所有标准日期和时间模式
var culture = new CultureInfo("de-De");
var dateString = someDate.ToString(culture);
var culture = new CultureInfo("de-De");
foreach (var format in culture.DateTimeFormat.GetAllDateTimePatterns())
{
Console.WriteLine(format);
}
Parse的第二个参数用于告诉解析器字符串的格式,而不是要将其转换为什么格式。您正在生成一个不变字符串,然后将其解析为一个德语字符串,这就是您的日和月被交换的原因
如果您的目标是获取日期的德语字符串表示形式,只需使用var dateString=someDate.ToStringCultureInfo.getcultureinfo-DE.好的,下面是我认为您想要实现的目标,不确定我是否正确:您想要读取一个不变的培养日期字符串并将其转换为德语培养日期字符串。 但在您的示例中,您试图将一个固定的文化日期解析为一个德国文化日期。当然,这会导致误解。试试这个:
string invariantCultureDateString = "12/11/2014 00:00:00";
var dateTime = DateTime.Parse(invariantCultureDateString, CultureInfo.InvariantCulture);
string germanCultureDateString = dateTime.ToString(CultureInfo.GetCultureInfo("de-De"));
BR请提供日期字符串好吗?例如,调试器中是什么?您正在使用不变式区域性格式化日期,然后使用不同的区域性对其进行解析…调试器将日期字符串显示为2014年11月12日00:00:00。这仅在de和不变式区域性使用相同格式时才起作用。改为使用不变量区域性进行解析。日期时间没有区域性或格式,它只有一个值。所以这个问题毫无意义。如果您转而询问如何在不同的区域性中将DateTimeas字符串格式化,那么它将非常有用。