是否有可以在URL上传递的标准日期/时间格式?

时间:2010-02-26 21:36:49

标签: .net datetime url

查看DateTimeFormatInfo文档,似乎所有标准格式都包含冒号,这使得将它们传递到令人不快/不可能的网址。

是否有一种标准化格式用于在网址上传递日期时间,最好是可以由.NET自动解析的格式?


更新:稍微澄清一下

这些数据的消费者将成为某种类型的Web服务 - 它可能是一个简单的HTTP GET,在查询字符串中具有此值,或者它将是具有url中某个值的REST。

ISO 8601管理日期/时间格式,根据维基文章,使用ToString("yyyyMMddTHHmmssZ")至少应符合标准。不幸的是,它没有被ASP.NET MVC自动拾取(还没有尝试过其他任何东西)。对于它的价值,ASP.NET MVC也不会自动将刻度转换为日期时间,这让我感到惊讶。

8 个答案:

答案 0 :(得分:8)

我会将所有内容整合到一个答案中:

你可以这样做:

        string urlSafeDateString = HttpServerUtility.UrlTokenEncode(date.ToUniversalTime().ToString(System.Globalization.CultureInfo.InvariantCulture).ToCharArray());

        DateTime date = DateTime.Parse(new string(HttpServerUtility.UrlTokenDecode(urlSafeDateString)), System.Globalization.CultureInfo.InvariantCulture).ToLocalTime();

或者你可以这样做:

        string urlSafeDateString = date.ToUniversalTime().ToString("yyyyMMddTHHmmss", System.Globalization.CultureInfo.InvariantCulture);

        DateTime date = DateTime.ParseExact(urlSafeDateString, "yyyyMMddTHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToLocalTime();

答案 1 :(得分:4)

是。 ISO 8601

http://en.wikipedia.org/wiki/ISO_8601

请确保你对它进行URLEncode处理冒号。

答案 2 :(得分:3)

它可能不是任何标准或类似内容的一部分,但您可以始终使用Unix timestamp,因为它们只包含数字。有关将其转换为.NET DateTime的方法,请参阅this article

答案 3 :(得分:2)

我们实际上有一个报告解决方案,其中日期和时间可以作为纯文本CCYYMMDDhhmmss值传递,然后当代码需要对这些值执行任何操作时,它只使用字符串操作将它们转换回可以显示或易于解析的格式(例如DB2 ISO格式CCYY-MM-DD或hh.mm.ss)。

结果是可读的,如果.NET没有可以轻松完成此操作的字符串操作指令,我会感到惊讶。

答案 4 :(得分:1)

答案 5 :(得分:1)

如果您需要日期和时间,我会使用DateTime.Ticks

如果您只需要日期,请使用HttpServerUtility.UrlEncode(date.ToShortDateString())

更新:Rick Strahl之前已经讨论过这个问题,并在his blog上提供了解决方案。

答案 6 :(得分:1)

  

对于它的价值,ASP.NET MVC也不会自动将刻度转换为日期时间,这让我感到惊讶。

DateTime的构造函数采用了滴答数:

 DateTime d = new DateTime(634028202671420663);

还有一个覆盖,可以将其映射到本地或UTC时间。这些都在文档中:http://msdn.microsoft.com/en-us/library/system.datetime.datetime.aspx

编辑:根据帖子的措辞实现,或许你在谈论ASP将自动转换为自动转换为DateTime,而不是必须读取数字参数。也许! : - )

答案 7 :(得分:1)

我刚遇到同样的问题并使用以下帮助方法解决了这个问题:

    private string Encode(DateTime date)
    {
        var formattedDate = date.ToString("yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
        return WebUtility.UrlEncode(formattedDate);
    }

在URL查询参数中使用输出后,.NET会将值正确地反序列化为传递到Web API服务的DateTime对象。