Convert.ToDateTime()问题

时间:2013-04-23 08:01:03

标签: c# asp.net date datetime

我有一个字符串,看起来像日期格式是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。这适用于所有系统。

谢谢你的

4 个答案:

答案 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);
        }