• DateTime Formating[转]


    source:http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/04/30/tips-net-datetime-formating.aspx

    在VB/VBScript時代,講到日期時間輸出的格式化,大家都知道要用Format(for VB)或FormatDateTime(fro VBScript)。到了.NET時代,有些VB.NET開發者會繼續沿用Format函數。事實上,DateTime Class本身就提供輸出格式化的支援,不用另外呼叫函數處理,而且對C#或VB.NET都通用。

    以將日期時間轉成字串為例,DateTime.Now.ToString()大家都會,但有個缺點。未指定任何參數的ToString(),輸出的日期時間格式將會依當時Windows的國別設定而定! 這種因地制宜的做法可以讓Windows Form的User倍感親切,也可算優點,但日期格式的不一致,常會因顯示長度不一造成版面配置的困擾,也是資料庫日期格式轉換出鎚的重要來源。所以我比較習慣應用系統內部使用統一的格式,不要受OS層次響。如果User要做到個人化,再由統一格式轉換過去。我最慣用的格式是"2007/04/30 21:30:00",沒有千禧問題,字串長度永遠固定,24小時制則不必在AM/PM vs 上午/下午間掙札,用來最順手。

    不過這個格式並不在.NET預設的標準日期時間格式之列,要產生這個格式,需要自己用yyyy, mm, dd去定義。.NET所提供的客製化日期時間格式字串十分完整,所以用DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")就可以產生我們要的結果,連string.Format函數都用不到。

    除了由DateTime -> String的轉換,若要把奇奇怪怪的日期時間字串換回DateTime,.NET也提供了同樣強大的客製彈性! 簡單來說,你可以怎麼把DateTime轉成String,就可以再怎麼把String轉成DateTime,只要提供同樣的日期時間格式字串就得了。例如: 
    string s="04/30, 2007 @ 09:30"; //某個變態想出來的怪格式
    DateTime d=DateTime.ParseExact(s, "MM/dd, yyyy @ HH:mm", null); //照樣解得回來

    很酷吧!

    最後補充一點,DateTime.ParseExact的第三個參數是IFormatProvider,在以上的例子中用不到,傳null就可以了。但如果你有用到AM/PM(中文是上午、下午)、星期、月份全名... 等等各國表示不同的資料,IFormatProvider就會有影響。

    例如: 在中文OS下
    DateTime.ParseExact("09:20:00 AM","HH:mm:ss tt", null) 會產生 String was not recognized as a valid DateTime.的訊息。

    以上的問題出在中文OS的國別設定中預設用中文表示上下午,導致ParseExact看不懂AM/PM。因此我們得改在IFormatProvider傳入使用AM/PM表示上下午的CultureInfo,en-US當然可以,不過我倒較常用InvariantCulture。改寫成以下方式就OK囉!
    DateTime.ParseExact("09:20:00 AM","HH:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture)

  • 相关阅读:
    前端使用canvas生成盲水印的加密解密
    html2canvas使用心得
    前端开发超好用的截图、取色工具——snipaste
    js识别中英文字符的字节长度并进行裁切
    运用CSS3媒体查询判断iPhoneX、iPhoneXR、iPhoneXS MAX及横竖屏
    webpack4学习笔记
    VUE打包发布后无法访问js、css资源
    IOS微信6.7.4输入框失去焦点,软键盘关闭后,被撑起的页面无法回退到原来正常的位置
    移动端浏览器预览word、excel、ppt
    js为页面元素添加水印
  • 原文地址:https://www.cnblogs.com/thxuaimin/p/3570938.html
Copyright © 2020-2023  润新知