DateTime.Parse,拉脱维亚文化背景

时间:2010-12-01 15:50:14

标签: c# asp.net datetime globalization cultureinfo

我正在以dd/MM/yyyy格式发送一个字符串,然后根据web.config全球化设置将其解析为lv-LV文化。

然后我将日期与DateTime.Now进行比较,看看它是否过去。

问题是,DateTime.Parse将我的字符串转换为dd.MM.yyyy格式,但DateTime.Now格式为MM.dd.yyyy,因此比较总是失败。

为什么DateTime.Now会在同一个线程文化中与DateTime.Parse的输出不同?

谢谢!

(更新)这是我正在使用的代码:

InputText包含DD.MM.YYYY格式的表单输入

DateTime date = DateTime.Parse(InputText, CultureInfo.CurrentCulture);
// Check it's not in the past
this.IsValid = (date.CompareTo(DateTime.Now) > 0);

[DateTime.Now]在此上下文中使用lv-LV cultureInfo为MM.DD.YYYY格式 [date]在DateTime.Parse

之后是DD.MM.YYYY格式

2 个答案:

答案 0 :(得分:2)

DateTime没有格式化 - 它只是一个时间点。

如果您正在查看它,则表示您正在输出它。使用正确的文化输出日期。

DateTime.ToString包含格式提供程序的重载,例如CultureInfo

string formatted = DateTime.ToString(new CultureInfo("lv-LV"));

如果未指定(在代码或配置中),将使用默认系统区域性(或在某些情况下使用CultureInfo.InvariantCulture)。

答案 1 :(得分:1)

如果您只想比较2个日期,则无需先转换为字符串。

DateTime myDate = DateTime.Parse(myDateAsString);//with the correct locale to ensure it's correctly parsed
if (myDate < DateTime.Now)
{
  //it's in the past
}