Converting a String to DateTime
如何将诸如
由于您处理的是基于24小时的时间,并且您有一个逗号分隔秒分数,因此建议您指定自定义格式:
1 2 | DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531","yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture); |
你基本上有两个选择。
第一种方法在语法方面非常宽泛,可以用许多不同的格式解析日期。对于可能以不同格式输入的用户来说,这是很好的。
ParseExact将允许您指定用于解析的日期字符串的确切格式。如果字符串的格式始终相同,则最好使用此格式。这样,您就可以轻松地检测到与预期数据的任何偏差。
您可以这样解析用户输入:
1 | DateTime enteredDate = DateTime.Parse(enteredString); |
如果字符串具有特定格式,则应使用其他方法:
1 | DateTime loadedDate = DateTime.ParseExact(loadedString,"d", null); |
试试这个
1 | DateTime myDate = DateTime.Parse(dateString); |
更好的方法是:
1 2 3 4 5 | DateTime myDate; if (!DateTime.TryParse(dateString, out myDate)) { // handle parse failure } |
似乎没有人实现扩展方法。在@cms回答的帮助下:
工作和改进的完整源代码示例如下:gist链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | 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))); } } } |
使用datetime.parse(字符串)
1 | DateTime dateTime= DateTime.Parse(dateTimeStr); |
尝试下面的方法,其中strdate是"mm/dd/yyyy"格式的日期
1 |
convert.todatetime或datetime.parse
1 2 3 4 5 6 7 8 9 10 | 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); |
我尝试过各种方法。对我有用的是:
1 | Convert.ToDateTime(data, CultureInfo.InvariantCulture); |
对我来说,
如果不确定输入值,也可以使用下面的datetime.typarseexact()。
1 2 3 4 5 6 7 8 9 | 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 } |
日期时间解析
Syntax:
1 2 3 | DateTime.Parse(String value) DateTime.Parse(String value, IFormatProvider provider) DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles) |
例子:
1 2 3 | string value ="1 January 2019"; CultureInfo provider = new CultureInfo("en-GB"); DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault);); |
- 值:日期和时间的字符串表示形式。
- 提供程序:提供区域性特定信息的对象。
- 样式:为某些日期和时间分析方法自定义字符串分析的格式选项。例如,allowHitespace是一个值,它有助于在解析字符串时忽略字符串中存在的所有空格。
值得记住的是,datetime是一个在框架内部存储为数字的对象,只有当您将其转换回字符串时,格式才适用于它。
正在分析将字符串转换为内部数字类型的过程。
格式化将内部数值转换为可读的字符串。
我最近遇到了一个问题,我试图将日期时间转换为传递给Linq,但当时我还没有意识到,当将日期时间传递给Linq查询时,格式与之无关。
1 2 | DateTime SearchDate = DateTime.Parse(searchDate); applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date); |
完整的日期时间文档
世界上不同的文化以不同的方式书写日期字符串。例如,在美国,2008年1月20日是2008年1月20日。在法国,这将引发InvalidFormatException。这是因为法国将日期时间理解为日/月/年,而在美国则是月/日/年。
因此,像20/01/2008这样的字符串将在法国解析为2008年1月20日,然后在美国抛出InvalidFormatException。
要确定当前区域性设置,可以使用System.Globalization.CultureInfo.CurrentCulture。
1 2 3 4 | 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); |
将此代码放入静态类中cx1〔4〕。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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(); } } |
这样,您就可以使用
1 2 3 4 5 6 7 8 | 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('-', ':', '-'); |