在瀏覽器的JavaScript裡new Date().toUTCString()後,傳遞給C# DateTime().TryParse()會發生什麼?
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的官方文件
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()會發生什麼?
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/S
javascript 中new Date().toLocaleString()在不同瀏覽器中的結果不一致的解決方法
Date.prototype.toLocaleString = function () { return this.getFullYear()+’-’+(this.getMonth()+1)+’-’+this.getDate()+’  ’+this.getHou
javascript中new Date()的瀏覽器相容性問題
正確的做法: [html] var time1 = (timestart+' 00:00:00').toString(); var time2 = (timeend+' 23:59:59').toString(); timestart = new Date(Date.parse
javascript中new Date()物件和getTime()方法的問題(又是來提問,(-__-)b)
昨天到現在一直在完成一個用canvas實現的倒計時的小案列,用到Date物件和getTime方法來計算倒計時的時間。老是有問題,不知道怎麼回事。貼error: 昨天是2016年7月18日 endTim
解決JavaScript中new Date(string)在IE不相容的問題
1.問題描述: let date = '2018.09.17' let dateStr = new Date(date); let year = dateStr.getFullYear(); l
關於瀏覽器快取問題(圖片更換後,頁面仍優先讀取快取)
因為部分需求(跟換頭像,切換輪播圖等等)改變圖片或者本地上傳新圖片,會導致圖片快取問題,從而達不到預期效果,還是載入原圖片查找了一些資料,總結出2個步驟: 1.在圖片的路徑的後面拼接 ‘?內容’ 解決,具體如下 (1)在圖片src路徑後面加上時間戳,使瀏覽
util包和sql包裡的Date類區別,該用哪一個
java.util.Date表示特定的瞬間,精確到毫秒---------------------------------------java.sql.Date一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒
在瀏覽器中輸入URL後,執行的全部過程。會用到哪些協議?(一次完整的HTTP請求過程)
一次完整的HTTP請求過程: 1.首先進行域名解析,域名解析具體過程講一下: 瀏覽器搜尋自己的DNS快取,快取中維護一張域名與IP地址的對應表; 若沒有,則搜尋作業系統的DNS快取; 若沒有,則作業系統將域名傳送至本地域名伺服器(遞迴查詢方式),本地域名伺服器查詢自己
Eclipse裡選一個變數後,這個類裡的該變數不變色了
1.使用“Alt+Shift+O”對該提示功能的開/關切換 2.可以在以下設定選中後的文字提示顏色 window--> Preferences--> General--> Editors--> Text Editors--> Annotat
關於 safari瀏覽器 不支援new Date 顯示NaN的問題記錄
知識點:new Date問題: safari瀏覽器 顯示 NaN因為 JS中要求Date型別轉換的原始資料格式是yyyy/mm/dd之類的,所以橫崗 - 要替換掉才可以今天同事來問,我一看果然啊,mac版高階的safari 沒問題,就老版本的 safari5.0 及以下有問題
javascript從資料庫獲取資料後,生成EasyUI樹
不用管是什麼資料庫,php還是java語言只要資料庫表字段是有自身指向的結構的都行。廢話少說,直接上程式碼<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl
當程序退出後,動態申請的內存會自動釋放嗎
you disk -m sign min aps call pen height stackoverflow有人問了這麽一個問題,下面這段程序執行完畢後,malloc的內存會釋放嗎 [cpp] view plain copy <span style="fo
JavaScript XMLHttpRequest GetUrlResponse 前端向後端傳值並獲得XML格式Response.
同步方式一般用於需要對觸發結果執行動作。 比如點選button彈出新的頁面, 頁面中獲取到Response的值,需要對彈出頁面進行處理。 非同步方式用於不需對觸發結果執行動作。 比如觸發結果是頁面多加一些元素,或者取到或更新某些值。不需要對這些元素和值進行處理。 同步
幾個有意思的小程式,當無限迴圈遇到sleep會發生什麼 !!!∑(゚Д゚ノ)ノ
今天翻文件的時候找到了幾個剛學Java的時候的小程式,跟大家共享一個,其他點 這裡 下載(下載連線包含所有展示的程式,如果實在沒幣可以私聊我,我給你發一份,有幣就支援一下把,謝謝) 這是倒數第二個的程式碼,非常簡單,矩陣的那個複雜一些,但是更有意思,點 這裡下載(下載連線包
獲取當前系統時間兩小時後和四小時後,蘋果瀏覽器報錯NaN,或者Invalid Date,
<script type="text/javascript" src="js/libs/jquery.min.js"></script> <script type="text/javascript" src="j
new Date 計算出當前日期後n天的日期 以及 根據兩個日期,計算出一共經歷了幾天 (包含了在ie和火狐中的相容)
1、計算出當前日期後n天的日期 getAfterFormatDate (days) { // 如果需要計算當前的日期 傳 0 即可 (此例是考慮時分秒的情況) let dd = new Date() dd.setDate(dd.ge
new Date()在安卓下正常,在IOS下顯示不出來
顯示 安卓 strong fine def 不支持 返回 方案 nbsp 之前用JS在做一個倒計時,在PC端和安卓下面顯示沒問題,在IOS下顯示不出來。 查找了資料,鏈接我忘記了。 原因是: 在IOS下,new Date("2000-2-22 00:10"),返回的
javascript創建css、js,onload觸發callback兼容主流瀏覽器的實現
question 禁止 rules 跨域問題 onload targe 結合 defined finally http://www.fantxi.com/blog/archives/load-css-js-callback/ 由於需要寫個函數,既可以加載css,又可
因實現本地瀏覽器訪問nginx修改配置文件後,安裝vsftpd失敗
ping 配置 href vsftpd blank dns echo aid vsftp 解決方法如下(修改dns配置) vi /etc/resolv.conf 在此文件最後加入:nameserver 8.8.8.8 如果沒有vi編輯器可用: echo "nameserve
javascript: new Date()
zone utc mts var 下午 scrip .get 中國 ear var date = new Date(); date.toString(); // "Tue Jan 02 2018 15:03:07 GMT+0800 (中國標準時間)" date.getD