我从文本框中获取日期并通过函数传递给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,两者相同,为什么变化?
答案 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" }, ...);