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
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
    這個月IOS 15就預計要更新了~或許還是有很多人看不懂這次IOS 15更新的內容到底是什麼.為了讓大家能迅速了解這次更新的重點,我們簡單介紹下這次更新的內容究竟有哪些吧~     事先說明,本文章只是提供個懶人包讓大家快速了解IOS 15的消息,如果想知道具體更新的內容請至蘋果官網了解~
Thumbnail
2021年想要保持的小習慣就是,記錄每天的自己有沒有喝到足量的水,所以我使用了健康跟捷徑這兩個蘋果原生的軟體,來真實記錄自己每天的喝水狀況。
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
今天要和大家介紹如何用 IOS 內建的螢幕錄影功能搭配 PDF 做教學影片!然後還會介紹不用下載任何 APP 就能編輯影片的超實用功能!
其實基本的電腦工具大多教學部落格都有提供。 為什麼還要出這一篇呢? 因為本專題是筆記,如果有問題想要找尋答案的人,如果本魯也有遇到,就可以大家一起互相交流XD
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
    這個月IOS 15就預計要更新了~或許還是有很多人看不懂這次IOS 15更新的內容到底是什麼.為了讓大家能迅速了解這次更新的重點,我們簡單介紹下這次更新的內容究竟有哪些吧~     事先說明,本文章只是提供個懶人包讓大家快速了解IOS 15的消息,如果想知道具體更新的內容請至蘋果官網了解~
Thumbnail
2021年想要保持的小習慣就是,記錄每天的自己有沒有喝到足量的水,所以我使用了健康跟捷徑這兩個蘋果原生的軟體,來真實記錄自己每天的喝水狀況。
Thumbnail
一張圖讓你搞懂IOS 14.7更新的內容 IOS 14.7於今日開放更新,這次更新又多了那些內容呢? 就讓皓哥3C為大家簡單整理介紹一下囉~
Thumbnail
有一天朋友傳了條訊息給我,說:身份證上浮水印好麻煩喔,要用線上網頁做,搞好久。 我回:你怎麽不問我啦,我教你阿,超簡單耶! 原來友人為了上傳保險資料(話說最近防疫保險有夠夯),又有個資上的顧慮,才有了以上的對話。接下來想教大家蘋果手機內建的「照片」功能,就能簡簡單單做出浮水印的效果嘍。
Thumbnail
今天要和大家介紹如何用 IOS 內建的螢幕錄影功能搭配 PDF 做教學影片!然後還會介紹不用下載任何 APP 就能編輯影片的超實用功能!
其實基本的電腦工具大多教學部落格都有提供。 為什麼還要出這一篇呢? 因為本專題是筆記,如果有問題想要找尋答案的人,如果本魯也有遇到,就可以大家一起互相交流XD