2017-11-14 13 views
1

Swift 3で時間と日付を別々に表示しようとしていて、両方のフィールドがnilを返しています。私は標準のDate()形式の文字列として日付を受け取ります。Swiftで日付と時刻を別々に表示

public func formatDateForAbandonTicket(_ dte: String) -> String { 
    print(dte) 
    let timeFormatter = DateFormatter() 
    timeFormatter.dateFormat = "HH:mm" 
    let t = timeFormatter.date(from: dte) 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "d/MM/YYYY" 
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00") 
    let d = dateFormatter.date(from: dte) 
    print() 
    print(t) 
    print() 
    print(d) 
    return "\(d)" + "  " + "\(t)" 
} 

私はd &の両方から無回答を得る。このパラメータには、正しい日付「2017-11-14 16:36:29 +0000」が含まれています。

おかげ

+0

少し前に戻ってください。文字列 'dte'はどのように作成されましたか? 'Date'オブジェクトで始まったのか、それとも一部のAPIからそのまま取得した文字列でしたか? – rmaddy

+0

APIソースから – user7684436

+0

'dte'は' String'です。あなたは 'dte'を使って時間の長さを計算しようとしていますか?私はそれを正しく理解していますか? – sconewolf

答えて

1

あなたが最初Datedteを変換すると、あなたは完全な日付文字列に一致する形式を指定する必要があることを行う必要があるので、あなたのコードは動作しません。 2つではなく、1つだけDateが必要です。

2つの別々の文字列を作成して1つに戻す理由はありません。

public func formatDateForAbandonTicket(_ dte: String) -> String { 
    print(dte) 
    let df = DateFormatter() 
    df.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 
    df.locale = Locale(identifier: "en_US_POSIX") 
    if let date = df.date(from: dte) { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "d/MM/yyyy  HH:mm" 
     dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) 
     let dateStr = dateFormatter.string(from: date) 
     return dateStr 
    } else { 
     return "" 
    } 
} 

また、ユーザーのロケール時間ではなく、UTC時間で結果を変換することにも注意してください。それがあなたが必要とするものであれば問題ありません。ユーザーにとって理にかなっていることを確認してください。

+0

完全に感謝します。正解とマークします。 – user7684436

関連する問題