【问题标题】:Convert.ToDateTime() Issue [duplicate]Convert.ToDateTime() 问题[重复]
【发布时间】:2013-04-23 08:01:03
【问题描述】:

我有一个字符串,看起来日期格式是 01/04/2013

对于string date="01/04/2013"

上面的字符串格式类似于a:01是Date,04是Month,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 。这适用于所有系统。

谢谢大佬的

【问题讨论】:

  • 可能是您使用的两台机器上的区域设置不同。
  • 可能与文化设置有关 - 这是我的第一个猜测。
  • 这看起来像是文化设置/本地化问题。见:stackoverflow.com/questions/5798908/…
  • Convert.ToDateTime 取决于 CurrentCulture。使用明确的文化超载。
  • 那么我们如何解决这个问题。

标签: c# asp.net date datetime


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是一个区域/本地化设置的事情。在不知道这些设置的情况下确保不会发生这种情况的方法是设置日期字符串,如下所示: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 方法的结果。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你可以试试这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-19
          • 1970-01-01
          • 2013-02-02
          • 2021-11-02
          • 1970-01-01
          • 2011-08-26
          • 2011-10-13
          • 2011-05-29
          相关资源
          最近更新 更多