2017-08-13 99 views
2

這是日期格式設置:如何從格式化的日期字符串中刪除'at'?

let dateFormatter = DateFormatter() 
dateFormatter.dateStyle = .medium 
dateFormatter.timeStyle = .medium 

預期輸出:

Aug 13, 2017 6:04:11 PM 

電流輸出:

Aug 13, 2017 at 6:04:11 PM 

如何能在 '在' 字來非常不指定格式刪除字符串,它來自哪裏?

與奧地利德語語言環境:

dateFormatter.locale = Locale(identifier: "de_AT") 
13.08.2017, 18:04:11 

使用美國英語語言環境:

dateFormatter.locale = Locale(identifier: "en_US") 
Aug 13, 2017 at 6:04:11 PM 
+3

你目前的語言環境是什麼?或者你也使用'dateFormat'屬性? – vadian

+0

@vadian我剛剛使用語言環境信息擴展了發佈。 'at'似乎來自英語的語言環境。我不使用dateFormat屬性。 –

回答

-3

可以實現使用

dateFormatter.dateFormat = "MMM dd, yyyy h:mm:ss a"預期的輸出。

at由於當前語言環境而放置在那裏,因此如果您想要刪除所有語言環境,則應指定確切的日期格式,如上所示。

+0

這會給'8月。 13,2017 6:22:48 PM'爲德語語言環境,它不「看起來不錯」:) –

+4

硬編碼一個特定的日期和時間格式是一個糟糕的做法。對於不同地區的大多數用戶來說,這會導致非常意外的日期和時間。 – rmaddy

-3

你可以寫爲字符串,並使用text.Replace沒事來取代它。

+3

這隻適用於某些地區。該字符串可以例如在德國的語言環境中是'13.08.2017,18:18:33'。 –

2

一種選擇將是使兩個獨立的轉換,一個 只有dateStyle = .medium,只有 timeStyle = .medium一個設置的設置,然後拼接的結果。但我不知道 如果

<date><space><time> 

格式在所有語言和區域設置很有意義。

一個更好的辦法是使用setLocalizedDateFormatFromTemplate

dateFormatter.setLocalizedDateFormatFromTemplate("MMM dd yyyy jj:mm:ss") 

這來靠近你想要的東西,並保證給予 合理的結果對於所有區域設置。這裏有一些例子。

 
en_US: Aug 13, 2017, 6:33:54 PM 
de:  13. Aug. 2017, 18:33:54 
ja:  2017年8月13日 18:33:54 

jj格式爲小時的使用,這將被解釋爲 HH(24小時格式)或hh(12小時AM/PM格式),區域設置取決於 。

+0

看起來不錯!但是我想避免指定一個格式字符串並找出'at'的來源。 –

+0

@AndrasHatvani然後請回答vadian在您的問題下面發佈的問題。 – rmaddy

+0

@AndrasHatvani:「at」是語言環境的一部分。 (NS)DateFormatter最終使用「用於Unicode的ICU庫」。相關部分可以是'ures_getStringByIndex(dateTimePatterns.getAlias(),glueIndex,&resStrLen,&status);'在http://source.icu-project.org/repos/icu/trunk/icu4c/source/i18n/smpdtfmt.cpp 。我不知道這個「膠水」是否可配置,但我懷疑它。 –