发布日期web api自定义格式

时间:2014-02-24 23:31:14

标签: asp.net-mvc asp.net-web-api

这是一场噩梦(至少我找不到一个简单的方法),我搜索了几个小时,实在找不到我的解决方案。

如何在web api中以自定义格式处理日期?我需要DD / MM / YYYY格式

我无法发布我的日期,因为我的api希望它们采用默认格式MM / DD / YY,一种解决方案是通过JavaScript将我的所有日​​期解析为my api需要的格式,但是真的吗?这不是一个更干净的方式吗?

如何让我的api知道我的格式?

我发现了this帖子,并说它不适用于发帖。还没有解决方案。

我的方式错了吗?对这个问题的投票太多了,甚至没有一个好的答案!

1 个答案:

答案 0 :(得分:1)

默认情况下,作为JSON格式化程序,在Web.Api中使用Json.NET序列化程序。 Json.NET以ISO 8601格式写日期。 UTC中的日期使用“Z”后缀编写。当地时间的日期包括时区偏移。例如:

2012-07-27T18:51:45.53403Z         // UTC
2012-07-27T11:51:45.53403-07:00    // Local

您可以通过在web api配置部分中设置DateFormatString属性来覆盖serrializer date time settings

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd";
    }
}

此外,您可能需要更改Global.asax

中的线程文化设置
protected void Application_BeginRequest(object sender, EventArgs e)
{            
    var newCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
    newCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
    newCulture.DateTimeFormat.ShortTimePattern = "HH:mm";
    newCulture.DateTimeFormat.LongTimePattern = "HH:mm:ss";
    newCulture.DateTimeFormat.DateSeparator = "-";
    Thread.CurrentThread.CurrentCulture = newCulture;
}