C#String to DateTime转换问题使用ParseExact

时间:2012-08-28 06:32:26

标签: c# parsing datetime

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

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

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

TextBox ---> OutPut

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

30/08/2012 - > 8/30/2012 12:00:00 AM

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;
    }

这里有什么问题,是否有一种更好的方式来获得恒定的输出类型,它也会在数据库中产生问题,因为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 | 09/01/2012

dd / mm / yyyy |毫米/日/年
(正确)(错)

但fromDate为103,toDate为101,两者相同,为什么变化?

3 个答案:

答案 0 :(得分: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中,它可能会给你带来问题,但无论如何这都是个坏主意。

答案 1 :(得分:0)

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

DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out result);

答案 2 :(得分:0)

DateTime.ParseExact(DateTime.Now, new string[]{ "dd/MM/yyyy" }, ...);