Convert.ToDateTime() Issue
本文关键字:Issue ToDateTime Convert | 更新日期: 2023-09-27 18:10:31
我有一个字符串,它看起来像一个日期格式是01/04/2013
对于string date="01/04/2013"
上述字符串格式如a: 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()
在不同的系统中返回不同的日期????
答案:
现在我改变了我的数据库列数据类型日期时间为Nvarchar。我不应该想要转换为DateTime。这在所有系统中都适用。
Thanks guy's
为什么Convert.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
方法来检测输入的格式是否正确是个好主意。
这是一个区域/本地化设置。确保在不知道这些设置的情况下不会发生这种情况的方法是这样设置日期字符串:yyyy-mm-dd
,例如2013-04-01
,它将始终被视为2013年4月1日。
关于Convert.ToDateTime
的更多信息:http://msdn.microsoft.com/en-us/library/xhz1w05e.aspx
相关位:
如果value不为空,则返回值是调用DateTime的结果。使用为当前区域性初始化的DateTimeFormatInfo对象中的格式化信息对值进行解析方法。
如果你打开电脑的控制面板,会有一个区域和语言选项(根据你的Windows版本,名称可能会有所不同)。在这里,您可以指定长、短日期和时间的格式。
如果您希望格式完全相同,请使用ToString()方法对datetime使用格式集,如下所述。
你可以试试:
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);
}