我正在以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格式答案 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
}