代码之家  ›  专栏  ›  技术社区  ›  Daniel Schaffer

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

  •  18
  • Daniel Schaffer  · 技术社区  · 15 年前

    看着 DateTimeFormatInfo 文档,似乎所有的标准格式都有冒号,这使得在URL上传递它们变得不愉快/不可能。

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


    更新: 稍微澄清一下

    这个数据的使用者将是某种类型的Web服务——它要么是一个简单的HTTP GET,在querystring中使用这个值,要么它将在某个地方使用URL中的值。

    ISO 8601 控制日期/时间格式,并根据wiki文章,使用 ToString("yyyyMMddTHHmmssZ") 至少应符合标准。不幸的是,它并没有被ASP.NET MVC自动接收(还没有尝试任何其他操作)。就其价值而言,ASP.NET MVC也不会自动将滴答转换为日期时间,这让我吃惊。

    8 回复  |  直到 7 年前
        1
  •  8
  •   Jeffrey L Whitledge    15 年前

    我会把所有的事情都放在一个答案里:

    你可以这样做:

            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();
    
        2
  •  4
  •   Jonathan Allen    15 年前

    对。国际标准化组织8601

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

    只需确保你对它进行了编码以处理冒号。

        3
  •  3
  •   Alex Turpin    15 年前

    它可能不是任何标准或类似标准的一部分,但您可以始终使用 Unix timestamp 因为只有数字。见 this article 以获取将其转换为.NET日期时间的方法。

        4
  •  2
  •   paxdiablo    15 年前

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

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

        6
  •  1
  •   Dan Puzey    15 年前

    就其价值而言,ASP.NET MVC也不会自动将滴答转换为日期时间,这让我吃惊。

    有一个日期时间的构造函数,它接受刻度数:

     DateTime d = new DateTime(634028202671420663);
    

    还有一个覆盖允许您将其映射到本地或UTC时间。全部在文档中: http://msdn.microsoft.com/en-us/library/system.datetime.datetime.aspx

    编辑: 从文章的措词中了解到,也许您正在谈论的是ASP将计时符号自动转换为日期时间,而不是必须读取数字参数。也许!-)

        7
  •  1
  •   jrummell    15 年前

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

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

    更新:Rick Strahl以前讨论过这个问题,并提供了一个解决方案 his blog .

        8
  •  1
  •   Daniel Mackay    7 年前

    我刚刚遇到了同样的问题,并用以下辅助方法解决了它:

        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服务的日期时间对象。