英国约会的TryParseExact仍然返回美国日期

时间:2014-08-20 10:47:46

标签: c# date tryparse

我遇到一个问题,在实时环境中,我的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"。

1 个答案:

答案 0 :(得分:1)

感谢詹姆斯 - 我追溯到它 - 这与上面的代码无关,它是外部日期“dtSearchEndDate”的变量。具体来说,变量被定义为DateTime,其自身和/或视图状态具有Get / Set - 这又称为日期验证例程。

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

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

然后以英国格式将其保存在viewstate中,然后在下次来电中使用。