Format 1. Sun, 09 Oct 2016 13:24:35 GMT
Format 2. Sun, 9 Oct 2016 13:36:09 UTC

Format 1 是在IE里面产生的(Windows10下的Edge和IE已经使用Format2)
Format 2 是Edge/Firefox/Safari/Chrome等产生的格式(这么说不太严谨,应该带上版本号)
那么采用DateTime.TryParse,Format 1会报错,而Format 2会成功。

我们先看一下C#下DateTime的格式,打开TryParse的文档,很长,似乎看不懂。用ILSpy查一下源代码,在代码中,我们似乎只能找到GMT字眼,却找不到UTC字眼。

通过代码,我们知道了这样的格式,C#DateTime中微软遵循了RFC1123标准(从这里扒出来的线索),我们找到RFC1123 第5.2.14节文档,5.2.14 Date and Time Specification章节,发现它引用的是RFC822 第5节的内容,在里面关于zone的内容中,只提及了GMT作为关键字,并没有使用UTC的字眼。

但是在IE中微软toUTCString方法,仅提到了UTC时间,并没有提到Format 1和Format 2之间的差异以及版本变更,在IE的版本变更信息中也没有提及具体的变化细节。

我们尝试从其它浏览器的文档里面找到蛛丝马迹,于是来到了FireFox的官方文档。在文档中,我们找到了ECMAScript 5.1ECMAScript 6的文档,其实二者没有区别,只是一个已定稿一个是在草稿状态。它们提到的格式说明在这里。文中,提到是基于ISO 8601标准进行实现的。但是我们可以发现ISO 8601所定义的标准,大多是YYYY-MM-DDTHH:mm:ss.sssZ格式的,其中的Z并不是GMT也不是UTC。

注意到在IE9和其它浏览器中都支持toISOString方法,这个方法,返回的正是以上格式的数据。
再回到toUTCString的各种定义,我们会发现一句话叫:生成人类可读易读的格式,比如C# DateTime的ToString可以传递格式o或者r,而且除了RFC1123中明确提到GMT字眼外,其它地方并未提到UTC,既然是给人阅读的,人是聪明且智能的,GMT还是UTC大家都能看懂,但是我们的命题其实是给机器读的。这个时候,我们更建议使用ISO 8601的YYYY-MM-DDTHH:mm:ss.sssZ在不同的系统间进行传递,既能表现世界时,又能保证各种程序转换的正确性。

临时解决办法:

既然IE旧版中的toUTCString方法,所产生的数据仅是UTC字眼和GMT字眼的差异,那么在进行TryParse之前,替换一下字符即可。注意一点,在IE中,如果“日”为1位数的话,比如是10月9日,那么可能显示的是9 Oct,这个在ECMA的标准中,还是明确提到要补齐为“09”,不过对于C#的DateTime.TryParse,则没有什么影响。

在浏览器的JavaScript里new Date().toUTCString()后,传递给C# DateTime().TryParse()会发生什么?的更多相关文章

  1. JavaScript里的Date 对象属性及对象方法--实现简单的日历

    上网搜索"js 日历插件"就会出来各种效果的功能丰富的日历插件,很多都可以下载源码,然后根据各自的需求对源码进行修改就可以直接用了. 但今天讲的不是如何使用这些插件,而是讲如何实现 ...

  2. JavaScript 字符串 & Math & Date

    字符串 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中. 'abc' "abc" 单引号字符串的内部,可以使用双引号.双引号字符串的内部,可以使用单引号. 'key=& ...

  3. JavaScript 里的 'this' 的一般解释

    本文旨在帮助自己和大家理解 JS 里的 this, 翻译.整理并改写自本人关注的一个博主 Dmitri Pavlutin,原文链接如下: https://dmitripavlutin.com/gent ...

  4. 如何才能通俗易懂的解释javascript里面的"闭包"?

    看了知乎上的话题 如何才能通俗易懂的解释javascript里面的‘闭包’?,受到一些启发,因此结合实例将回答中几个精要的答案做一个简单的分析以便加深理解. 1. "闭包就是跨作用域访问变量 ...

  5. chrome浏览器下JavaScript实现clipboard时无法访问剪切板解决方案

    在用JavaScript实现某个简单的复制到剪切板功能的时候,会考虑一下浏览器兼容性,主要是重点在IE和FireFox,把这个两个浏览器搞定后,基本上其他浏览器也不用太操心了,Chrome也一样,没出 ...

  6. JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel="stylesheet"属性?/EL表达式是什么?

    JavaScript 里,$ 代表什么? 比如说我写一个mouseover事件: $(document).ready(function(){ $("p").mouseover(fu ...

  7. JavaScript高级编程——Date类型

    JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  8. JavaScript里的循环方法之forEach,for-in,for-of

    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...

  9. javascript里的sleep()方法

    很多编程语言里都有sleep(),delay()等方法,它能让我们的程序不那么着急的去执行下一步操作,而是延迟.等待一段时间.软件开发中经常会遇到需要这样的函数,比如等待几分钟去检查某一事件是否发生. ...

随机推荐

  1. 如何在string.Format()方法中输出大括号

    在string.Format参数中,大括号{}是有特殊意义的符号,但是如果我们希望最终的结果中包含大括号({}),那么我们需要怎么做呢?是”\{”吗?很遗憾,运行时,会给你一个Exception的!正 ...

  2. Mapped Statements collection does not contain value fo

    Mapped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1.mapper.xml中没有加入name ...

  3. linux学习之——vim简明教程

    摘自  http://blog.csdn.net/niushuai666/article/details/7275406 ——————————正文开始—————————— 你想以最快的速度学习人类史上 ...

  4. android数据存储之外部存储(External Storage)

    Android设备支持外部存储器,可以是可移动存储器(如SD卡),也可以是内置在设备中的外部存储器(不可移动). 如果希望外部存储器上的文件只对本程序有用,并且当程序被卸载时目录中的文件自动被系统删除 ...

  5. Ubuntu root 密码 sudo passwd

    用vmware安装好ubuntu后,su - 切换不到root,提示密码错误. 解决办法: 1.用当前登录用户打开终端,在终端输入命令 sudo passwd,输入当前用户的密码然后回车 2.会提示输 ...

  6. 第二章 git 工作区与reset,revert

    1.Git工作区原理图 要清楚理解git reset的三个模式的区别,首先应该搞明白Git的各个工作区的划分. 工作区(working directory):在当前仓库中,新增,更改,删除文件这些动作 ...

  7. XE3随想14:关于 SO 与 SA 函数

    通过 SuperObject 的公用函数 SO 实现一个 ISuperObject 接口非常方便; 前面都是给它一个字符串参数, 它的参数可以是任一类型甚至是常数数组. SA 和 SO 都是返回一 I ...

  8. 复制mueclipse项目到eclipse

    本文适用于将MyEclipse上的项目projectA检出后重命名为projectB的情况,如果只是检出projectA到Eclipse,也可以部分参考 1.从svn上检出Myeclipse项目到Ec ...

  9. 强大的Spring缓存技术(上)

    缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 ...

  10. eyegaze

    1. eye_gaze https://github.com/iitmcvg/eye-gaze 2.deepgaze https://github.com/mpatacchiola/deepgaze ...