我有一个问题,在实际环境中,我转换英国日期的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;
}您将看到我的Testline -将文本框日期替换为日期和月份。
在我的开发机器上,文本框"01-08-2014“中的条目显示为"d=1 m-8”。
在活动框中,它将我的日期条目(在文本框中)从"01-08-2014“更改为现在显示"d=8 m-1”。
发布于 2014-08-20 20:15:32
多亏了James -我追溯了它-它与上面的代码无关,它是保存外部日期"dtSearchEndDate“的变量。具体地说,该变量被定义为一个DateTime,具有来自自身和/或视图状态的Get/Set -这反过来也调用日期验证例程。
问题是,在集合中,逻辑是"Viewstate"dtSearchEndDate“= value;”,它以呈现的日期格式保存它,而日期格式恰好是US格式-所以只需将其更改为:
视图状态“dtSearchEndDate”= value.Tostring("dd-MM-yyyy");
然后将其以UK格式保存在viewstate中,然后在下一个get调用中工作。
https://stackoverflow.com/questions/25402771
复制相似问题