2016-08-23 3 views
2

AM/PM時間を24時間に変換したいとします。変換後の日付が無効です12h - > 24h

let inputDateString = "11:05:45PM" 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "HH:mm:ssa" 
let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ??? 

if let inputDate = inputDate { 
    dateFormatter.dateFormat = "HH:mm:ss" 
    print(dateFormatter.stringFromDate(inputDate)) 
} 
  1. 私は多分それはいくつかの奇妙なタイムゾーンを使用して時間を変換だと思った:それは、しかし、私は奇妙な問題に対して立っている...完全に些細なことする必要があります。だから私はsystemLocaleまたはGBのロケールを追加しようとしましたが、それは役に立たなかったのです。
  2. それから、01.01.2000 12:00:00までの日付を設定できないというアイデアが出てきました。(意味がないのは、少なくとも1970年から働くはずなので)。だから私は2005年にそれを動かすために日、月などを追加しましたが、問題は依然として続きます。

これをテストするには、import Foundationで簡単にプレイグラウンドに貼り付けることができます。

なぜ私は時間が間違っていますか?

- 編集 -

あなたが"01:05:45PM"のような他のどの時間にinputDateStringを変更する場合は、inputDateは同じになります:/しかし、あなたが分または秒を変更した場合、それに応じて更新されます。

+0

最初の書式は「hh:mm:ssa」 – Desdenova

+2

1月2000日である必要があります。それはその中にデフォルトを置きます。 – pedrouan

+0

@pedrouanそれは問題ではありませんでした。とにかく、その答えはすでに下にある;)。 – Vive

答えて

2

小文字のhは、入力時刻が12時間形式であることを通知するため、dateFormatを"hh:mm:ssa"に変更する必要があります。

DateFormatterは、フォーマットにUnicode標準を使用するため、the Unicode Documentation(MacOS 10.9およびiOS 7以降で有効、08/2016以降は有効)の値を使用します。

使いやすい参照はhttp://nsdateformatter.comにあります。

+0

2番目は素晴らしいリファレンスです、URLのおかげで! – Vive

+0

DateFormatterはフォーマット文字列を文字通りに解釈します。 'a'はただそれに言います、これはAM/PM情報が見つかる位置です。彼は実際の入力時間が12時間( 'hh')か24時間(' HH')のスタイルかどうかを知る必要があります。 –

0
let inputDateString = "11:05:45PM" 

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "HH:mm:ssa" // Here, change the format string to "hh:mm:ssa" 
let inputDate = dateFormatter.dateFromString(inputDateString) // "Jan 1, 2000, 12:05 PM" ??? 

if let inputDate = inputDate { 
    dateFormatter.dateFormat = "HH:mm:ss" 
    print(dateFormatter.stringFromDate(inputDate)) 
} 
+0

これは@ ast1と同じ応答で、20分前に投稿され、受け入れられました。この回答の利益は何ですか? – Vive

関連する問題