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 转换为字符串,然后将其传递到服务器端。