我遇到一个问题,在实时环境中,我的TryParseExact转换英国日期会返回美国格式日期。
如果我进入" 01-08-2014" (8月1日),返回的日期变量实际上是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.Month = 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"。
答案 0 :(得分:1)
感谢詹姆斯 - 我追溯到它 - 这与上面的代码无关,它是外部日期“dtSearchEndDate”的变量。具体来说,变量被定义为DateTime,其自身和/或视图状态具有Get / Set - 这又称为日期验证例程。
问题是在Set中,逻辑是“Viewstate [”dtSearchEndDate“] = value;”它保存在呈现的DATE格式中,恰好是美国格式 - 所以只需将其更改为:
Viewstate [“dtSearchEndDate”] = value.Tostring(“dd-MM-yyyy”);
然后以英国格式将其保存在viewstate中,然后在下次来电中使用。