在英国日期上尝试parseexact仍然返回美国日期
本文关键字:日期 返回 parseexact 美国 英国 | 更新日期: 2023-09-27 18:18:45
我有一个问题,在现场环境中,我的TryParseExact转换英国日期返回美国格式日期。
如果我输入"01-08-2014" (1st Aug),返回的日期变量实际上是2014年1月8日——我不明白为什么这只在实时环境中出现。
转换代码如下:
public static DateTime ToDate(object readField)
{
DateTime dt = DateTime.MinValue;
if ((readField != null))
{
readField = readField.ToString().Replace("/", "-");
System.Globalization.CultureInfo ukCulture = new System.Globalization.CultureInfo("en-GB");
if (DateTime.TryParseExact(readField.ToString(), new string[] { "dd-MM-yy hh:mm:ss", "dd-MM-yyyy hh:mm:ss", "dd-MM-yyyy", "d-M-yyyy", "d-M-yyyy h:mm:ss tt", "d-M-yyyy H:mm", "d-M-yyyy hh:mm tt" }, ukCulture.DateTimeFormat , System.Globalization.DateTimeStyles.None, out dt)) {
return dt;
}
}
return dt;
}
如我所说,如果我传入"01-08-2014",然后在live中显示返回值…
dt。Day = 08
dt。月= 01
在我的开发机器和测试机器上,一切正常。据我所知,所有机器的设置(语言,控制面板中的日期格式)都是相同的。什么好主意吗?
更新调用代码和结果....
正在调用例程(在本例中),从ASP文本框传入直接条目如下:
if (txtSearchEndDate.Text.Length > 0)
{
dtSearchEndDate = LARDRHelper.ToDate(txtSearchEndDate.Text);
txtSearchEndDate.Text = "d=" + dtSearchEndDate.Day.ToString() + " m-" + dtSearchEndDate.Month.ToString();
storequery[2] = txtSearchEndDate.Text;
}
您将看到我的测试行-将文本框日期替换为日期和月份。
在我的开发机器上输入"01-08-2014"的文本框,结果是"d=1 m-8"
在活动框中,它将我的日期条目(在文本框中)从"01-08-2014"更改为现在显示"d=8 m-1"。
感谢James -我跟踪了它-它与上面的代码无关,它是保存外部日期"dtSearchEndDate"的变量。具体地说,变量被定义为DateTime,具有来自其自身和/或viewstate的Get/Set操作,而viewstate又调用日期验证例程。
问题是,在Set中,逻辑是"Viewstate["dtSearchEndDate"] = value;",这将其保存为所呈现的DATE格式,而恰好是美国格式-因此只需将其更改为:
Viewstate["dtSearchEndDate"] = value.Tostring("dd-MM-yyyy");
然后将其保存为英国格式的viewstate,然后在下一次get调用中工作。