查看DateTimeFormatInfo文档,似乎所有标准格式都包含冒号,这使得将它们传递到令人不快/不可能的网址。
是否有一种标准化格式用于在网址上传递日期时间,最好是可以由.NET自动解析的格式?
更新:稍微澄清一下
这些数据的消费者将成为某种类型的Web服务 - 它可能是一个简单的HTTP GET,在查询字符串中具有此值,或者它将是具有url中某个值的REST。
ISO 8601管理日期/时间格式,根据维基文章,使用ToString("yyyyMMddTHHmmssZ")
至少应符合标准。不幸的是,它没有被ASP.NET MVC自动拾取(还没有尝试过其他任何东西)。对于它的价值,ASP.NET MVC也不会自动将刻度转换为日期时间,这让我感到惊讶。
答案 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)
答案 2 :(得分:3)
它可能不是任何标准或类似内容的一部分,但您可以始终使用Unix timestamp,因为它们只包含数字。有关将其转换为.NET DateTime的方法,请参阅this article。
答案 3 :(得分:2)
我们实际上有一个报告解决方案,其中日期和时间可以作为纯文本CCYYMMDD
和hhmmss
值传递,然后当代码需要对这些值执行任何操作时,它只使用字符串操作将它们转换回可以显示或易于解析的格式(例如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对象。