C#

时间:2016-09-25 12:31:08

标签: c# date datetime

我使用DateTime.ParseExact将我的日期字符串值转换为Date对象。

以下是我用来将日期字符串转换为DateTime对象的代码。

DateTime.ParseExact(“ my date string value from database ”, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture) ;

我的数据库返回一个像“25/9/2016 00:00:00”这样的字符串值。 但是当我调试我的代码时,它不断地给我字符串是无效的字符串转换为DateTime对象。

结束我必须将笔记本电脑的日期时间格式更改为“d / M / yyyy H:mm:ss”,以使我的数据库字符串值变为有效的字符串值。

那么我怎样才能保证我的代码在服务器上运行。这种情况的解决方案是什么?在构建我的代码之前,是否必须检查服务器日期时间格式并根据它更改格式字符串。??

1 个答案:

答案 0 :(得分:1)

当你给它字符串“25/9/2016 00:00:00”时,格式为“dd / MM / yyyy HH:mm:ss”的

ParseExact将失败,因为月份只是一个数字。

将格式更改为“dd / M / yyyy HH:mm:ss”是正确的解决方案。

但是,你不应该存储日期&数据库中的时间作为字符串,因为您将遇到这种问题。当字符串转换日期发生时,其中一个主要原因是不同的设置。主要是日 - 月 - 月 - 月 - 日,单日对比和日和月的两位数。此外,如果您要转换为本地时间而不是UTC,那么如果您有不同时区的用户,则数据库中的事件将无序显示。

如果你真的必须有字符串,那么你可以使用ParseExact的重载,该重载采用一系列允许的格式,以便你可以处理多种格式,如该页面中的示例所示:

  string[] formats= {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
                     "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
                     "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
                     "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
                     "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm",
                     "MM/d/yyyy HH:mm:ss.ffffff" };
  string[] dateStrings = {"5/1/2009 6:32 PM", "05/01/2009 6:32:05 PM", 
                          "5/1/2009 6:32:00", "05/01/2009 06:32", 
                          "05/01/2009 06:32:00 PM", "05/01/2009 06:32:00",
                          "08/28/2015 16:17:39.125", "08/28/2015 16:17:39.125000" };
  DateTime dateValue;

  foreach (string dateString in dateStrings)
  {
     try {
        dateValue = DateTime.ParseExact(dateString, formats, 
                                        new CultureInfo("en-US"), 
                                        DateTimeStyles.None);
        Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
     }
     catch (FormatException) {
        Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
     }                                               
  }