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比較有機會碰到

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

留言
avatar-img
留言分享你的想法!
avatar-img
Michelle Chen的沙龍
8會員
34內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
Michelle Chen的沙龍的其他內容
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
紀錄時間2024/07/30
Thumbnail
紀錄時間2024/07/30
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
Thumbnail
一天24小時,每個人的時間都一樣,但不管時針分針怎麼指,真正的時間會變短、變長、變快與變慢,和格林威治的不同。只要在適合與屬於自己的時區內,不論快慢都是對的時間。此外,這個月最大的改變是意象練習的know how,意象練習的運用領域廣泛,尤其在需要高度專注與瞬間判斷的決策環境。
Thumbnail
紀錄時間2024/05/26
Thumbnail
紀錄時間2024/05/26
Thumbnail
某種程度來說,也算是相當有時間觀念(?)。
Thumbnail
某種程度來說,也算是相當有時間觀念(?)。
Thumbnail
Notion內建的日期欄位,可以調整顯示英文的日期格式 但是若想要顯示台灣的民國、中文的星期、或是日本的平成昭和幾年要怎麼做呢? 透過Notion formula只要填好日期,就可自動呈現出台灣民國年度、台灣星期、年齡計算、距離今年過了幾年/是幾年後等等,各種格式的函數Notion模板免費索取!
Thumbnail
Notion內建的日期欄位,可以調整顯示英文的日期格式 但是若想要顯示台灣的民國、中文的星期、或是日本的平成昭和幾年要怎麼做呢? 透過Notion formula只要填好日期,就可自動呈現出台灣民國年度、台灣星期、年齡計算、距離今年過了幾年/是幾年後等等,各種格式的函數Notion模板免費索取!
Thumbnail
時間: 2024/2/22, 晚上8:00~9:00 形式: Line語音通話 規則: 前半小時日語,後半小時國語 前情提要 因為要安排打工時間,語言交換的時間現在變成可能週一或週四晚上的時間進行。
Thumbnail
時間: 2024/2/22, 晚上8:00~9:00 形式: Line語音通話 規則: 前半小時日語,後半小時國語 前情提要 因為要安排打工時間,語言交換的時間現在變成可能週一或週四晚上的時間進行。
Thumbnail
一般來說在swift把Date轉成String,會使用dateFormat轉換 使用HH:mm轉成24小時制需注意的地方
Thumbnail
一般來說在swift把Date轉成String,會使用dateFormat轉換 使用HH:mm轉成24小時制需注意的地方
Thumbnail
Hi, 大家好。我是茶桁。 上一节课最后,我让我家去预习一下日历和时间的相关模块,不知道大家有没有去预习。不管如何,这节课,让我们开始做一个练习:万年历。 没有预习的小伙伴也跟着一起,在本次练习完成的时候,相信你会对这些模块有了初步的了解。 好,让我们开始吧。 首先,我们需要来看看calen
Thumbnail
Hi, 大家好。我是茶桁。 上一节课最后,我让我家去预习一下日历和时间的相关模块,不知道大家有没有去预习。不管如何,这节课,让我们开始做一个练习:万年历。 没有预习的小伙伴也跟着一起,在本次练习完成的时候,相信你会对这些模块有了初步的了解。 好,让我们开始吧。 首先,我们需要来看看calen
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News