在英国日期上尝试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"。

在英国日期上尝试parseexact仍然返回美国日期

感谢James -我跟踪了它-它与上面的代码无关,它是保存外部日期"dtSearchEndDate"的变量。具体地说,变量被定义为DateTime,具有来自其自身和/或viewstate的Get/Set操作,而viewstate又调用日期验证例程。

问题是,在Set中,逻辑是"Viewstate["dtSearchEndDate"] = value;",这将其保存为所呈现的DATE格式,而恰好是美国格式-因此只需将其更改为:

Viewstate["dtSearchEndDate"] = value.Tostring("dd-MM-yyyy");

然后将其保存为英国格式的viewstate,然后在下一次get调用中工作。