Swift - DateFormat HH:mm的坑

閱讀時間約 3 分鐘

一般來說在swift把Date轉成String,會使用dateFormat轉換

extension Date {
func string(withFormat format: String = "dd/MM/yyyy HH:mm") -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: self)
}
}

大寫的HH:mm是24小時制,小寫的hh:mm是12小時制

let date = Date()
print(date.string(withFormat: "yyyy/MM/dd HH:mm")) // 2023/08/24 16:21
print(date.string(withFormat: "yyyy/MM/dd hh:mm")) // 2023/08/24 04:21

但用HH:mm,碰到一個使用者回報,他的時間顯示是

2023/08/24 下午 04:21(哪來的下午啊?????

用了很多方法,用該使用者的iOS版本測、調手機時間調時區、調地區、調12小時、24小時制都無法重現情境,找了很久總算找到這篇 https://www.jianshu.com/p/79465eb4e4c4

要固定輸出的格式,Locale需指定en_US_POSIX

extension Date {
func toString(withFormat format: String = "dd/MM/yyyy HH:mm") -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.calendar = Calendar(identifier: .gregorian)
return dateFormatter.string(from: self)
}
}

官方解釋

if you’re working with fixed-format dates, you should first set the locale of the date formatter to something appropriate for your fixed format. In most cases the best locale to choose is “en_US_POSIX”, a locale that’s specifically designed to yield US English results regardless of both user and system preferences.

https://developer.apple.com/library/archive/qa/qa1480/_index.html

另外跟版本應該無關,因為這篇是iOS15.4,但我們的使用者是16.5.1,目前不知道規律但貌似中國的iphone比較有機會碰到

大蘋果:沒有遵守開發規範是你自己活該(指

6會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
    這個月IOS 15就預計要更新了~或許還是有很多人看不懂這次IOS 15更新的內容到底是什麼.為了讓大家能迅速了解這次更新的重點,我們簡單介紹下這次更新的內容究竟有哪些吧~     事先說明,本文章只是提供個懶人包讓大家快速了解IOS 15的消息,如果想知道具體更新的內容請至蘋果官網了解~
Thumbnail
2021年想要保持的小習慣就是,記錄每天的自己有沒有喝到足量的水,所以我使用了健康跟捷徑這兩個蘋果原生的軟體,來真實記錄自己每天的喝水狀況。
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
今天要和大家介紹如何用 IOS 內建的螢幕錄影功能搭配 PDF 做教學影片!然後還會介紹不用下載任何 APP 就能編輯影片的超實用功能!
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
    這個月IOS 15就預計要更新了~或許還是有很多人看不懂這次IOS 15更新的內容到底是什麼.為了讓大家能迅速了解這次更新的重點,我們簡單介紹下這次更新的內容究竟有哪些吧~     事先說明,本文章只是提供個懶人包讓大家快速了解IOS 15的消息,如果想知道具體更新的內容請至蘋果官網了解~
Thumbnail
2021年想要保持的小習慣就是,記錄每天的自己有沒有喝到足量的水,所以我使用了健康跟捷徑這兩個蘋果原生的軟體,來真實記錄自己每天的喝水狀況。
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
今天要和大家介紹如何用 IOS 內建的螢幕錄影功能搭配 PDF 做教學影片!然後還會介紹不用下載任何 APP 就能編輯影片的超實用功能!