TryParse , TryParse TryParseExact TryParse TryParseExact. , , :
var dtStr = "2011-03-21 13:26";
DateTime? dt = dtStr.ToDate("yyyy-MM-dd HH:mm");
Parse, ParseExact .. ParseExact
if (dt.HasValue) {//continue processing } else {//do error handling }
( dt , dt.Value dt.Value) ( null).
, "" -operator ?. , :
int? year = dtStr?.ToDate("yyyy-MM-dd HH:mm")?.Year;
year.HasValue , year.HasValue , , year null, - . , .
: .ToDate()
.NetFiddle
public static class Extensions
{
public static DateTime? ToDate(this string dateTimeStr, params string[] dateFmt)
{
const DateTimeStyles style = DateTimeStyles.AllowWhiteSpaces;
if (dateFmt == null)
{
var dateInfo = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat;
dateFmt=dateInfo.GetAllDateTimePatterns();
}
var result = DateTime.TryParseExact(dateTimeStr, dateFmt, CultureInfo.InvariantCulture,
style, out var dt) ? dt : null as DateTime?;
return result;
}
}
, InvariantCulture TryParseExact: ( , , "." , ). , , .
: .ToDate() ( ) / .
, result dt , TryParseExact DateTime? , . # 7 ToDate :
if (DateTime.TryParseExact(dateTimeStr, dateFmt,
CultureInfo.InvariantCulture, style, out var dt)) result = dt;
,
var result = DateTime.TryParseExact(dateTimeStr, dateFmt, CultureInfo.InvariantCulture,
style, out var dt) ? dt : null as DateTime?;
DateTime? result = null; DateTime? result = null; DateTime dt; - . ( out DateTime dt out var dt ).
, params : 2 - .
var dtStr="2011-03-21 13:26";
var dt=dtStr.ToDate("yyyy-MM-dd HH:mm");
if (dt.HasValue)
{
Console.WriteLine("Successful!");
}
else
{
Console.WriteLine("Invalid date format!");
}
, dt.HasValue , . , TryParseExact DateTimeStyles , / .
, / , (TryParseExact ),
string[] dateFmt = {"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"};
var dtStr="5/1/2009 6:32 PM";
var dt=dtStr.ToDate(dateFmt);
, :
var dateStr = "2011-03-21 13:26";
var dt = dateStr.ToDate("yyyy-MM-dd HH:mm", "M/d/yyyy h:mm:ss tt");
?? ,
var dtStr = "2017-12-30 11:37:00";
var dt = (dtStr.ToDate()) ?? dtStr.ToDate("yyyy-MM-dd HH:mm:ss");
.ToDate() , , ISO "yyyy-MM-dd HH:mm:ss" . , "" .
LINQ, ( .NetFiddle ):
var patterns=new[] { "dd-MM-yyyy", "dd.MM.yyyy" };
(new[] { "15-01-2019", "15.01.2019" }).Select(s => s.ToDate(patterns)).Dump();
, , .
TryParseExact
, (.. , ):
TryParseExact , - , TryParse, Parse, : 2)
1) [: Parse ] , TryParse, .
, TryParse TryParseExact - : out NULL, - if , . , , .
, (, , , ), , , : , .
, , ( , , ).
, .ToDate(strDateFormat) , .ToDate(strDateFormat) - , DateTime.Parse - .
1) (. try {... } catch(Exception ex) {...} try {... } catch(Exception ex) {...}), Parse, , - , , . TryParse , , , .
2) - StackOverflow, Microsoft #.