什么是JSON日期时间的TryParseExact格式化程序?

时间:2015-08-19 16:29:24

标签: javascript c# json datetime datetime-format

我正在将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的格式是什么?

1 个答案:

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