2017-08-30 115 views
0

我只是試圖打開一個日期對象,當用戶在他們的iPhone上啓用「24小時時間」到「12小時時間」日期對象。轉換24小時時間日期對象到12小時時間日期對象

我已經試過這在關於這個問題以前線程說,但我沒有運氣:

初始finalDate對象:日期2017年8月30日22:00:00 UTC

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier:"en_US") 
dateFormatter.dateFormat = "MM/dd/yyyy h:mm a" 
let dateString = dateFormatter.string(from: finalDate) 
let theFinalConvertedDate = dateFormatter.date(from: dateString) 

我最終什麼:

theFinalConvertedDate Date? 2017-08-30 22:00:00 UTC 

我不知道爲什麼會這樣合作nsidering是dateString打印了出來:

"08/30/2017 5:00 PM"  

所以它最初將其轉換爲預期的輸出,但theFinalConvertedDate結束是日期? 2017-08-30 22:00:00 UTC

+1

正如其他人所說,不需要'日期'轉換,因爲'日期'對象沒有「24小時」和「12小時」格式。這完全是你想要'DateFormatter'輸出字符串格式化的問題。但是這個'theFinalConvertedDate'字符串的目的是什麼?它是用於在用戶界面中呈現還是用於發送到Web服務或某些本地永久存儲?這個問題的正確答案取決於這個字符串的最終用法是什麼。 – Rob

回答

1

試圖更改Date對象的格式沒有任何意義。 A Date沒有格式。您只能通過使用DateFormatDate轉換爲String來獲得某種期望格式的字符串。

記錄一個Date總是以固定格式顯示UTC時區中的日期值。

所有你需要的是:

let dateFormatter = DateFormatter() 
dateFormatter.locale = Locale(identifier:"en_US_POSIX") 
dateFormatter.dateFormat = "MM/dd/yyyy h:mm a" 
let dateString = dateFormatter.string(from: finalDate) 

dateString是你關心的價值。這將以所需的格式。

並且請注意,您需要使用en_US_POSIX以確保結果不受用戶在iOS設備上的時間設置的影響。

+0

我覺得自己像個白癡。謝謝你rmaddy! – jenniferDWG

+1

rmaddy,我知道你知道這一點,但爲了將來的讀者,我提到它:如果字符串的用途是用於與Web服務和/或持久存儲進行交互,則只能使用'en_US_POSIX'語言環境。如果向最終用戶呈現日期,這將是一個非常糟糕的主意。但是,如果對於Web服務或持久性存儲,那麼使用'en_US_POSIX'是非常好的方法(但是如果是這樣的話,這種'MM/dd/yyyy h:mm a'格式與ISO 8601/RFC 3999的選擇是非常奇怪的)。 – Rob

+1

@Rob爲了補充一點,我會說,對於任何日期/時間顯示給用戶,你應該很少使用'dateFormat'。你應該使用'dateStyle'和'timeStyle'的一些理想組合。 – rmaddy

相關問題