我正在将DateTime
作为字符串传递给Web API 2调用,我无法终身找出我需要使用哪种格式化程序来获取TryParseExact
获得准确的日期/时间。我正在删除客户端上的GMT偏移量,所以我需要它按原样获取参数,而不使用GMT。
使用Javascript:
var htmlDateString = "8/19/2015 12:00 AM";
var fromDate = new Date(htmlDateString);
//remove GMT offset
fromDate.setHours(fromDate.getHours() - (fromDate.getTimezoneOffset() / 60));
var wireFormattedDate = fromDate.toJSON(); //results in 2015-08-19T00:00:00.000Z
控制器:
public string Get(string fromDate)
{
DateTime parsedFromDate;
if(!DateTime.TryParseExact(fromDate, "?????", CulturInfo.InvariantCulture, DateTimeStyles.None, out from))
{
//some stuff
}
//some other irrelevant stuff
}
如果我使用TryParse
(没有格式化程序),我会得到GMT偏移值(我在GMT-6中):
{8/18/2015 6:00:00 PM}
这不是我想要的。我已经尝试了以下几个formatter variations,所有这些都无法解析:
yyyy-MM-ddThh:mm:ss:ffz
yyyy-MM-ddThh:mm:ss:ffzz
yyyy-MM-ddThh:mm:ss:fffz
yyyy-MM-dd hh:mm:ss:fffz
我是否需要指定其他DateTimeStyle
?我必须为“T”和“Z”字符做些什么特别的事吗? JSON格式的日期时间TryParseExact
的格式是什么?
答案 0 :(得分:2)
使用格式:yyyy-MM-dd'T'HH:mm:ss.fff'Z'"
您可以执行以下操作:
var isParsed = DateTime.TryParseExact(dateStr,
"yyyy-MM-dd'T'HH:mm:ss.fff'Z'",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out parsedFromDate);
另一种方法是指定DateTimeStyles.RoundtripKind
,如:
DateTime.TryParse(dateStr, CultureInfo.InvariantCulture,
DateTimeStyles.RoundtripKind,
out parsedFromDate);
还有一件事要添加,就个人而言,我总是在Javascript端使用特定格式,然后使用相同的格式解析C#中的DateTime
。我会将Javascript DateTime
转换为字符串,然后将其传递给服务器端。