将字符串转换为DateTime

553 c# datetime

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

CMS*_*CMS 719

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

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

  • 好眼睛.我没有看到OP中的逗号. (4认同)

San*_*der 241

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

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

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

您可以像这样解析用户输入:

DateTime enteredDate = DateTime.Parse(enteredString);
Run Code Online (Sandbox Code Playgroud)

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

DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
Run Code Online (Sandbox Code Playgroud)

"d"代表短日期模式(有关详细信息,请参阅MSDN)并null指定应使用当前区域性来解析字符串.


geh*_*kky 125

试试这个

DateTime myDate = DateTime.Parse(dateString);
Run Code Online (Sandbox Code Playgroud)

更好的方法是:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}
Run Code Online (Sandbox Code Playgroud)


Ami*_*ito 27

使用DateTime.Parse(string)

DateTime dateTime= DateTime.Parse(dateTimeStr);
Run Code Online (Sandbox Code Playgroud)


gun*_*sus 25

似乎没有人实现扩展方法.借助@ CMS的答案:

工作和改进的完整源代码示例如下: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)));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Kri*_*hna 20

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

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
Run Code Online (Sandbox Code Playgroud)

  • 没有人提到它只适用于那种特定的格式。 (2认同)

zei*_*lja 19

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

Convert.ToDateTime(data, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

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


小智 15

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);
Run Code Online (Sandbox Code Playgroud)


dev*_*.bv 14

如果您不确定输入值,也可以使用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
}
Run Code Online (Sandbox Code Playgroud)


Mr.*_*r.B 11

DateTime.Parse

句法:

DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)
Run Code Online (Sandbox Code Playgroud)

例:

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

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

  • 解析将字符串转换为内部数字类型。

  • 格式化将内部数值转换为可读的字符串。

我最近遇到了一个问题,我试图将DateTime转换为传递给Linq,当时我还没有意识到将DateTime传递给Linq查询时格式无关紧要。

DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
Run Code Online (Sandbox Code Playgroud)

完整的DateTime文档


gun*_*sus 7

我刚刚找到了一种优雅的方式:

Convert.ChangeType("2020-12-31", typeof(DateTime));

Convert.ChangeType("2020/12/31", typeof(DateTime));

Convert.ChangeType("2020-01-01 16:00:30", typeof(DateTime));

Convert.ChangeType("2020/12/31 16:00:30", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("en-GB"));

Convert.ChangeType("11/?????/1437", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("ar-SA"));

Convert.ChangeType("2020-02-11T16:54:51.466+03:00", typeof(DateTime)); // format: "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz"
Run Code Online (Sandbox Code Playgroud)