0

我正在从文本框中获取日期并通过函数将其传递给 dateTime,

但它给了我两个不同的结果

DateTime Fromdate1 = devTools.ParseDate(datepicker1.Text);

文本框--->输出

02/09/2012 --> 2/9/2012 12:00:00 AM

2012 年 8 月 30 日 --> 2012 年 8 月 30 日上午 12:00:00

public DateTime ParseDate(string s)
    {
        DateTime result;
        if (!DateTime.TryParse(s, out result))
        {
            string[] formats = { "dd'/'MM'/'yyyy" };
            result = DateTime.ParseExact(s, formats, new CultureInfo("en-US"), DateTimeStyles.None);
            //result = DateTime.ParseExact(s, "dd'/'MM'/'yyyy", System.Globalization.CultureInfo.InvariantCulture);
            //result = result.AddDays(1);
        }
        return result;
    }

这里有什么问题,是否有一种正确的方法来获得恒定的输出类型,它也会在 DB 中产生问题,因为 08/09 将与 09/08 进行检查,反之亦然!

SQL 中的另一个问题:

Select convert(nchar(10),FromDate, 103) AS FromDate,convert(nchar(10),ToDate, 103) AS ToDate FROM Tbl_PropertyRoomSeasonPrices

输出 :

28/08/2012 | 2012 年 9 月 1 日

dd/mm/yyyy | mm/dd/yyyy
(正确)(错误)

但是 fromDate 的 103 和 toDate 的 101 使它都相同,为什么会有变化?

4

3 回答 3

0

在我看来,这里的“问题”就是你如何解释输出。你的方法返回一个DateTime- 不是一个字符串 - 所以当你写的时候。"02/09/2012 --> 2/9/2012 12:00:00 AM" 你大概的意思是字符串 "02/09/2012" 的输入会给你一个结果DateTime,它恰好有一个字符串表示为 "2 /9/2012 12:00:00 AM" 以任何方式将其转换为字符串,例如通过查看调试器。这将使用当前的文化和默认格式——但这不是DateTime价值本身的一部分。

查看 的属性,DateTime您会发现它已被正确解析。

它也会在数据库中产生问题,因为 08/09 将与 09/08 进行检查,反之亦然

不,不会的。如果您正确地做事 - 使用参数化 SQL 并指定DateTime属性的值,则不会。如果您将值直接包含在 SQL 中,这很可能会给您带来问题,但无论如何这都是个坏主意。

于 2012-08-28T06:36:55.953 回答
0

尝试使用接受 IFormatProvider 的重载 Parse 方法;例如;

DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out result);
于 2012-08-28T06:37:29.290 回答
0
DateTime.ParseExact(DateTime.Now, new string[]{ "dd/MM/yyyy" }, ...);
于 2012-08-28T06:38:11.820 回答