我已经创建了一个API端点。调用方可以使用POST传递相关参数的方法来调用API 。在参数中,有一个datetime格式格式的参数。
POST
datetime
问题在于,调用此API时,调用者可能会datetime以3种不同的格式传递:
long int
string
我必须解析该datetime值并将其转换为DateTime或string时间戳格式。
DateTime
我已经尝试使用DateTime.TryParse(),DateTime.Parse(),Convert.ToDateTime()和Convert.ToDouble(),但他们都不在肯定为我工作。
DateTime.TryParse()
DateTime.Parse()
Convert.ToDateTime()
Convert.ToDouble()
所需的输出必须为en-GB格式。
en-GB
我曾想过要if-else if- else与TryParse3次一起使用一个块else,说不能解析该字符串。这是最好的解决方案吗?还是有比这更好的解决方案?
if-else if- else
TryParse
else
请帮忙!
您应该考虑要求时区。1不需要它,但是#2和#3需要它。
public DateTime ParseRequestDate() { // https://stackoverflow.com/questions/2883576/how-do-you-convert-epoch-time-in-c CultureInfo enUS = new CultureInfo("en-US"); var dt = "1374755180"; //var dt = "7/25/2013 6:37:31 PM"; //var dt = "2013-07-25 14:26:00"; DateTime dateValue; long dtLong; // Scenario #1 if (long.TryParse(dt, out dtLong)) return dtLong.FromUnixTime(); // Scenario #2 if (DateTime.TryParseExact(dt, "MM/dd/yyyy hh:mm:ss tt", enUS, DateTimeStyles.None, out dateValue)) return dateValue; // Scenario #3 if (DateTime.TryParseExact(dt, "yyyy-MM-dd hh:mm:ss", enUS, DateTimeStyles.None, out dateValue)) return dateValue; throw new SomeException("Don't know how to parse..."); }
编辑 正如Matt Johnson指出的那样,DateTime.TryParseExact接受一个格式字符串数组。2&3可能会凝聚。
public DateTime ParseRequestDate() { // https://stackoverflow.com/questions/2883576/how-do-you-convert-epoch-time-in-c CultureInfo enUS = new CultureInfo("en-US"); var dt = "1374755180"; //var dt = "7/25/2013 6:37:31 PM"; //var dt = "2013-07-25 14:26:00"; DateTime dateValue; long dtLong; // Scenario #1 if (long.TryParse(dt, out dtLong)) return dtLong.FromUnixTime(); // Scenario #2 & #3 var formatStrings = new string[] { "MM/dd/yyyy hh:mm:ss tt", "yyyy-MM-dd hh:mm:ss" }; if (DateTime.TryParseExact(dt, formatStrings, enUS, DateTimeStyles.None, out dateValue)) return dateValue; throw new SomeException("Don't know how to parse..."); }
我从另一个问题借来的时代转换。 (扩展方法)
public static class MyExtensions { public static DateTime FromUnixTime(this long unixTime) { var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return epoch.AddSeconds(unixTime); } }