首页 文章

将字符串转换为DateTime

提问于
浏览
465

如何将 2009-05-08 14:40:52,531 等字符串转换为 DateTime

12 回答

  • 25

    由于您正在处理基于24小时的时间,并且您使用逗号分隔秒分数,我建议您指定自定义格式:

    DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                           System.Globalization.CultureInfo.InvariantCulture);
    
  • 102

    你基本上有两种选择 . DateTime.Parse()DateTime.ParseExact() .

    第一个是非常宽容的语法,并将以许多不同的格式解析日期 . 对于可能以不同格式出现的用户输入是有益的 .

    ParseExact将允许您指定用于解析的日期字符串的确切格式 . 如果您的字符串始终采用相同的格式,则最好使用此方法 . 这样,您可以轻松检测到与预期数据的任何偏差 .

    您可以解析用户输入,如下所示:

    DateTime enteredDate = DateTime.Parse(enteredString);
    

    如果您有特定的字符串格式,则应使用其他方法:

    DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
    

    "d" 代表短日期模式(请参阅MSDN for more info), null 指定应使用当前区域性来解析字符串 .

  • 635

    试试这个

    DateTime myDate = DateTime.Parse(dateString);
    

    更好的方法是:

    DateTime myDate;
    if (!DateTime.TryParse(dateString, out myDate))
    {
        // handle parse failure
    }
    
  • 11

    似乎没有人实现扩展方法 . 在@CMS's answer的帮助下:

    工作和改进的完整源代码示例如下:Gist Link

    namespace ExtensionMethods {
        using System;
        using System.Globalization;
    
        public static class DateTimeExtensions {
            public static DateTime ToDateTime(this string s, 
                      string format = "ddMMyyyy", string cultureString = "tr-TR") {
                try {
                    var r = DateTime.ParseExact(
                        s: s,
                        format: format,
                        provider: CultureInfo.GetCultureInfo(cultureString));
                    return r;
                } catch (FormatException) {
                    throw;
                } catch (CultureNotFoundException) {
                    throw; // Given Culture is not supported culture
                }
            }
    
            public static DateTime ToDateTime(this string s, 
                        string format, CultureInfo culture) {
                try {
                    var r = DateTime.ParseExact(s: s, format: format, 
                                            provider: culture);
                    return r;
                } catch (FormatException) {
                    throw;
                } catch (CultureNotFoundException) {
                    throw; // Given Culture is not supported culture
                }
    
            }
    
        }
    }
    
    namespace SO {
        using ExtensionMethods;
        using System;
        using System.Globalization;
    
        class Program {
            static void Main(string[] args) {
                var mydate = "29021996";
                var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}
    
                mydate = "2016 3";
                date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}
    
                mydate = "2016 12";
                date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}
    
                mydate = "2016/31/05 13:33";
                date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}
    
                mydate = "2016/31 Ocak";
                date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}
    
                mydate = "2016/31 January";
                date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); 
                // {31.01.2016 00:00:00}
    
                mydate = "11/شعبان/1437";
                date = mydate.ToDateTime(
                    culture: CultureInfo.GetCultureInfo("ar-SA"),
                    format: "dd/MMMM/yyyy"); 
             // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*
    
                System.Diagnostics.Debug.Assert(
                   date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
            }
        }
    }
    
  • 19

    试试下面的内容,其中strDate是您的'MM / dd / yyyy'格式的日期

    var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
    
  • 201
  • 14

    使用DateTime.Parse(string)

    DateTime dateTime= DateTime.Parse(dateTimeStr);
    
  • 14
    string input;
    DateTime db;
    Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): ");
    input = Console.ReadLine();
    db = Convert.ToDateTime(input);
    
    //////// this methods convert string value to datetime
    ///////// in order to print date
    
    Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day);
    
  • 16

    如果您不确定输入值,也可以使用DateTime.TryParseExact(),如下所示 .

    DateTime outputDateTimeValue;
    if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue))
    {
        return outputDateTimeValue;
    }
    else
    {
        // Handle the fact that parse did not succeed
    }
    
  • 1

    我试过各种方法 . 对我有用的是:

    Convert.ToDateTime(data, CultureInfo.InvariantCulture);
    

    data 对我来说就是这样的时间9/24/2017 9:31:34 AM

  • 1

    世界上不同的文化以不同的方式写日期字符串 . 例如,在美国01/20/2008是2008年1月20日 . 在法国,这将抛出InvalidFormatException . 这是因为法国将日期时间视为日/月/年,而在美国则是月/日/年 .

    因此,像2008年1月20日这样的字符串将在2008年1月20日在法国解析,然后在美国抛出InvalidFormatException .

    要确定当前的区域性设置,可以使用System.Globalization.CultureInfo.CurrentCulture .

    string dateTime = "01/08/2008 14:50:50.42";  
            DateTime dt = Convert.ToDateTime(dateTime);  
            Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",  
                              dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
    
  • 15

    Put this code in a static class > public static class ClassName{ }

    public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
    {
       try
       {
          datetime = datetime.Trim();
          datetime = datetime.Replace("  ", " ");
          string[] body = datetime.Split(' ');
          string[] date = body[0].Split(dateSpliter);
          int year = date[0].ToInt();
          int month = date[1].ToInt();
          int day = date[2].ToInt();
          int hour = 0, minute = 0, second = 0, millisecond = 0;
          if (body.Length == 2)
          {
             string[] tpart = body[1].Split(millisecondSpliter);
             string[] time = tpart[0].Split(timeSpliter);
             hour = time[0].ToInt();
             minute = time[1].ToInt();
             if (time.Length == 3) second = time[2].ToInt();
             if (tpart.Length == 2) millisecond = tpart[1].ToInt();
          }
          return new DateTime(year, month, day, hour, minute, second, millisecond);
       }
       catch
       {
          return new DateTime();
       }
    }
    

    In this way, you can use

    string datetime = "2009-05-08 14:40:52,531";
    DateTime dt0 = datetime.TToDateTime();
    
    DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
    DateTime dt5 = "2009-05-08".ToDateTime();
    DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
    DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
    DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
    

相关问题