0

我有一个字符串,看起来日期格式是 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 //Month 1st and date 2nd

为什么Convert.DateTime()在不同的系统中返回不同的,不同的日期????

回答 :

现在我将我的 DataBase Coloumn DataType DateTime 更改为 Nvarchar 。所以我不应该转换为 DateTime 。这适用于所有系统。

多谢你们

4

4 回答 4

4

为什么 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方法来检测输入的格式是否正确是一个好主意。

于 2013-04-23T08:07:11.933 回答
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);
        }
于 2013-04-23T08:08:36.420 回答
0

这是一个区域/本地化设置的事情。确保在不知道这些设置的情况下不会发生这种情况的方法是像这样设置日期字符串:yyyy-mm-dd,例如2013-04-01,它将始终被视为 2013 年 4 月 1 日。

Convert.ToDateTime有关此处的更多信息:http: //msdn.microsoft.com/en-us/library/xhz1w05e.aspx

相关位:

如果 value 不为 null,则返回值是使用为当前区域性初始化的 DateTimeFormatInfo 对象中的格式信息对 value 调用 DateTime.Parse 方法的结果。

于 2013-04-23T08:03:27.903 回答
0

如果您在 PC 上打开控制面板,将会有一个区域和语言选项(名称可能因您的 Windows 版本而异)。您可以在此处指定长日期和短日期和时间的格式。

如果您希望格式完全相同,请在日期时间上使用 ToString() 方法并设置格式,如下所述

于 2013-04-23T08:05:07.487 回答