2017-07-17 4 views
0

UTCの日付をローカルの日付ではなくローカルの日付に変換したいとします。私はUTCの日付をローカルの日付(文字列)に変換しようとしましたが、現地の日付(文字列)から現地の日付に変換しようとしました。 UTC日付のみを返します。私は毎回タイムゾーンを与えようとしました。何も動作しません。誰かが私が間違っているアイデアを持っていれば、UTC即時のローカル日付

let dateFormator = DateFormatter() 
dateFormator.dateFormat = inputDateStringFormat 
if fromUTC { 
    dateFormator.timeZone = TimeZone(abbreviation: "UTC") 
} else { 
    dateFormator.timeZone = TimeZone.current 
} 

let resultDate = dateFormator.date(from: inputDateString) 

dateFormator.dateFormat = reqDateStringFormat 
if toUTC { 
    dateFormator.timeZone = TimeZone(abbreviation: "UTC") 
} else { 
    dateFormator.timeZone = TimeZone.current 
} 

guard let dateToConvert = resultDate else { return nil } 
let resultString = dateFormator.string(from: dateToConvert) 

let finalDateFormater = DateFormatter() 
finalDateFormater.dateFormat = reqDateStringFormat 

if toUTC { 
    finalDateFormater.timeZone = TimeZone(abbreviation: "UTC") 
} else { 
    finalDateFormater.timeZone = TimeZone.current 
} 

if let requiredDate = finalDateFormater.date(from: resultString) { 
    return requiredDate 
} else { 
    return nil 
} 

FYC:

  1. toUTC値はinputDateStringFormatが ":MM:YYYY-MM-DD HH SS" です
  2. 偽であるUTCから
  3. 真inputDateStringである「2017年です-07-18 04:45:00 "
  4. reqDateStringFormatは" yyyy-MM-dd HH:mm:ss "
01です。
+4

「日付」は絶対時刻であり、タイムゾーンはありません。 "UTC Date"や "Local Date"などはありません。 –

+0

resultStringを必須の日付形式に変換できますか? – Antony

+1

*文字列*には書式があり、 'Date'には書式がありません。 - 本当に必要な情報で質問を更新してください。与えられた入力とは何か、そして期待される出力は何ですか? –

答えて

1

質問に関する3つのコメントが既に説明されているので、Dateにはタイムゾーンがありません。 Dateは、絶対的な時点を表す数字です(良い近似としてニュートンの宇宙を使用しています)。私の日付(WETタイムゾーンで)が123.45の場合、インドでのあなたの日付は、となりますが、私はあなたが私より5.5時間早いと言います。答えは123.45なので、私は自分のタイムゾーンで123.45に相当する日付を質問するのは無意味です。

コード内では常にDateを使用してください。私を信じて、あなたの人生を楽にしてくれるでしょう。あなたがユーザーに日付を表​​示したい、またはユーザーから日付を取得したい場合は、UTCで動作させたくないが、タイムゾーンにある(または指定している)。したがって、適切なタイムゾーンでそれにDateFormatterを使用します。

APIまたはファイル形式にタイムゾーン付きの特定の形式が必要な場合は、そのために日付フォーマッタも使用してください。

APIにUnixの日付が必要な場合は、timeInterfalSince1970メソッドを使用してUnixの時刻を取得できます。

あなたはISOの日付を取得する必要がある場合は、タイムゾーンに

を指定することを可能にするISO8601DateFormatterを使用FSCalendar

私はGithubの上FSCalendar codeを通じてクイックブラウズを持っていたし、それが見えますそれはSwift Dateと本当に同じものであるNSDateを期待しているようです。 Dateのタイムゾーンを正しく設定していれば、それを供給するだけで問題ありません。

関連する問題