代码之家  ›  专栏  ›  技术社区  ›  MAK

已将格式化日期时间字符串转换为日期时间[重复]

  •  -2
  • MAK  · 技术社区  · 5 年前

    如何转换字符串,如 2009-05-08 14:40:52,531 变成一个 DateTime ?

    0 回复  |  直到 9 年前
        1
  •  717
  •   kame Christian C. Salvadó    7 年前

    由于您处理的是基于24小时的时间,并且有一个逗号分隔秒数部分,因此建议您指定自定义格式:

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

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

    第一个是非常宽容的语法,将解析日期在许多不同的格式。这对不同格式的用户输入是有好处的。

    ParseExact将允许您指定用于分析的日期字符串的确切格式。如果字符串的格式总是相同的,那么最好使用这个。这样,您就可以轻松地检测出与预期数据的任何偏差。

    您可以这样分析用户输入:

    DateTime enteredDate = DateTime.Parse(enteredString);
    

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

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

    "d" 代表短日期模式(参见 MSDN for more info )以及 null 指定当前区域性应用于分析字符串。

        3
  •  125
  •   gehsekky    9 年前

    试试这个

    DateTime myDate = DateTime.Parse(dateString);
    

    更好的方法是:

    DateTime myDate;
    if (!DateTime.TryParse(dateString, out myDate))
    {
        // handle parse failure
    }
    
        4
  •  26
  •   Amir Touitou    6 年前

    使用DateTime.Parse(字符串)

    DateTime dateTime= DateTime.Parse(dateTimeStr);
    
        5
  •  25
  •   Community Egal    7 年前

    似乎没有人实现扩展方法。借助于 @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)));
            }
        }
    }
    
        6
  •  20
  •   Krishna    10 年前

    请尝试下面的方法,其中strDate是“MM/dd/yyyy”格式的日期

    var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
    
        8
  •  19
  •   zeilja    6 年前

    我尝试了各种方法。对我有用的是:

    Convert.ToDateTime(data, CultureInfo.InvariantCulture);
    

    data 对我来说就是这样的时间2017年9月24日上午9:31:34

        9
  •  15
  •   Edwin de Koning Umair Baig    13 年前
    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);
    
        10
  •  14
  •   dev.bv    9 年前

    如果不确定输入值,也可以使用下面的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
    }
    
        11
  •  11
  •   Mr.B    5 年前

    日期时间.分析

    语法:

    DateTime.Parse(String value)
    DateTime.Parse(String value, IFormatProvider provider)
    DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)
    

    例子:

    string value = "1 January 2019";
    CultureInfo provider = new CultureInfo("en-GB");
    DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
    
    • 值:日期和时间的字符串表示形式。
    • 提供程序:提供区域性特定信息的对象。
    • 样式:为某些日期和时间解析方法自定义字符串解析的格式选项。例如,AllowWhiteSpaces是一个有助于在字符串解析时忽略字符串中所有空格的值。

    还值得记住的是,DateTime是一个在框架内部存储为数字的对象,格式仅在将其转换回字符串时适用。

    • 正在分析将字符串转换为内部数字类型。

    • 将内部数值转换为可读的格式 弦。

    我最近遇到了一个问题,我试图将DateTime转换为传递给Linq,但我当时没有意识到,在将DateTime传递给Linq查询时,格式是不相关的。

    DateTime SearchDate = DateTime.Parse(searchDate);
    applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
    

    Full DateTime Documentation

        12
  •  2
  •   M.R.T    6 年前

    将此代码放入静态类中 > 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();
       }
    }
    

    这样,你可以使用

    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('-', ':', '-');
    
        13
  •  1
  •   Saeed Dini    7 年前

    世界上不同的文化以不同的方式书写日期字符串。例如,在美国2008年1月20日是2008年1月20日。在法国,这将引发一种无效的格式异常。这是因为法国将日期时间读作日/月/年,而在美国则是月/日/年。

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

    要确定当前区域性设置,可以使用System.Globalization.CultureInfo.current culture。

    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);  
    
        14
  •  0
  •   Abdulhakim Zeinu    5 年前
    String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
    DateTime.Parse(now);
    

    这个给你

    2019-08-17 11:14:49.000