我有一个字符串,看起来像日期格式是01/04/2013
string date="01/04/2013"
以上字符串格式为: 01为日期,04为月,2013年。
现在我正在使用convert.todatetime()
见下文:
DateTime **DateTimeValue** =Convert.ToDateTime(date);
我的系统中的DateTimeValue返回:01-04-2013T00:00:00
//日期第1和第2个月
但是当转换相同的DateTimeValue时,会在其他系统:04-01-2013T00:00:00
上返回 //第1个月和第2个日期
为什么Convert.DateTime()
在不同的系统中返回不同的不同日期????
答案:
现在我将DataBase Coloumn DataType DateTime更改为Nvarchar。所以我不应该想要转换为DateTime。这适用于所有系统。
谢谢你的
答案 0 :(得分:3)
为什么Convert.DateTime()返回不同的,不同的日期 不同的系统????
因为它使用当前文化将字符串转换为datetime。在某些文化中,月份在日期之前,而在其他文化中,反之亦然。
您可以指定文化或使用CultureInfo.InvariantCulture
(类似于en-US
),也可以使用DateTime.ParseExact
指定格式。
string date="01/04/2013";
// day 4 month 1
DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture);
或
// day 4 month 1
DateTime dt = DateTime.ParseExact(date, "MM/dd/yyyy", CultureInfo.InvariantCulture);
一般来说,最好使用TryParse
方法来检测输入的格式是否正确。
答案 1 :(得分:0)
这是区域/本地化设置的事情。如果不了解这些设置,确保不会发生这种情况的方法是设置日期字符串,如下所示:yyyy-mm-dd
,例如2013-04-01
始终被视为2013年4月1日。
此处有关Convert.ToDateTime
的更多信息:http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx
相关位:
如果value不为null,则返回值是使用为当前区域性初始化的DateTimeFormatInfo对象中的格式化信息对值调用DateTime.Parse方法的结果。
答案 2 :(得分:0)
如果您使用PC上的控制面板,将会有一个区域和语言选项(根据您的Windows版本,名称可能会有所不同)。在这里,您可以指定长短日期和时间的格式。
如果您希望格式完全相同,请使用日期时间的ToString()方法,格式设置为here。
答案 3 :(得分:0)
你可以试试这个:
string date = "01/04/2013";
DateTime dtTime;
if (DateTime.TryParseExact(date, "dd/MM/yyyy",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out dtTime))
{
Console.WriteLine(dtTime);
}