JSON 日期时间的 TryParseExact 格式化程序是什么?
What is the TryParseExact formatter for a JSON datetime?
我正在将 DateTime
作为字符串传递到 Web API 2 调用,但我终究无法弄清楚我需要使用哪种格式化程序获取 TryParseExact
以获得精确的 date/time。我正在删除客户端上的 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
的格式是什么?
使用格式: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
转换为字符串,然后将其传递到服务器端。
我正在将 DateTime
作为字符串传递到 Web API 2 调用,但我终究无法弄清楚我需要使用哪种格式化程序获取 TryParseExact
以获得精确的 date/time。我正在删除客户端上的 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
的格式是什么?
使用格式: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
转换为字符串,然后将其传递到服务器端。