解析多种格式的日期时间
我已经创建了一个API端点。调用方可以使用POST
传递相关参数的方法来调用API 。在参数中,有一个datetime
格式格式的参数。
问题在于,调用此API时,调用者可能会datetime
以3种不同的格式传递:
long int
-例如1374755180- 美国格式-例如“ 2013年7月25日下午6:37:31”(如
string
) - 时间戳格式-例如“ 2013-07-25 14:26:00”(作为
string
)
我必须解析该datetime
值并将其转换为DateTime
或string
时间戳格式。
我已经尝试使用DateTime.TryParse()
,DateTime.Parse()
,Convert.ToDateTime()
和Convert.ToDouble()
,但他们都不在肯定为我工作。
所需的输出必须为en-GB
格式。
回答:
我曾想过要if-else if-
else与TryParse
3次一起使用一个块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);
}
}
以上是 解析多种格式的日期时间 的全部内容, 来源链接: utcz.com/qa/417775.html