2017-11-21 3 views
0

サーバーの応答から2つのタイムスタンプが取得されています。swiftのタイムスタンプの2つの日付からの日付を取得できません3

value = 1507824000; //2017-10-12 16:00:00 +0000 
    value2 = 1507939200; //2017-10-14 00:00:00 +0000 

     let startTimeStamp = dateTimeStampValues["value"] as! String 
     let endTimeStamp = dateTimeStampValues["value2"] as! String 


    let convertedDate = Double(startTimeStamp) 

    let convertedEndDate = Double(endTimeStamp) 

    var startdate = Date(timeIntervalSince1970: convertedDate!) 


    let enddate = Date(timeIntervalSince1970: convertedEndDate!) 
    self.showRange(between: startdate, and: enddate) 

func showRange(between startDate: Date, and endDate: Date) { 
    guard startDate < endDate else { return } 

    let calendar = Calendar.current 
    let calendarEndDate = calendar.startOfDay(for: endDate) 

    var currentDate = calendar.startOfDay(for: startDate) 

    while(currentDate <= calendarEndDate) { 
     print(currentDate) 
     currentDate = Calendar.current.date(byAdding: .day, value: 1, to: currentDate)! 
     let dateString = currentDate.convertDateToString(withFormat: "MMM-dd-yyyy h:mm a") 
     self.totalDaysFromServerArray.append(dateString) 
     print("\(self.totalDaysFromServerArray)") 
    } 
} 

しかし、以下のように、アウトプットは

self.totalDaysFromServerArray is ["Oct-13-2017 12:00 AM", "Oct-14-2017 12:00 AM", "Oct-15-2017 12:00 AM"] 

ですが、誰もがどこ、私を提案することができます、それは10月、14-17

に 10月 - 12から2017から印刷する必要があります私のコードで間違っている、ありがとう。

+1

日時に変換すると、値はSun Jan 18 1970 16:20:24 GMT + 0530(http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/#)です。 WhQlgkyB0yk –

+0

@AbdulKarim:これとは関係ありません。両方の値が正しいので、!あなたが日付に変換すると、 '2017-10-12 16:00:00 + 0000'と' 2017-10-14 00:00:00 + 0000'が返されます。 – Lion

答えて

0

あなたはそれがUTC形式になりますので、それは、それぞれの印刷2017-10-12 16:00:00 +00002017-10-14 00:00:00 +0000になります(文字列に変換せずに)直接startdateenddateを印刷する場合は。その日付を文字列に変換するときは、ローカルタイムゾーンになります!たとえば、indiaの場合、タイムゾーンはGMT + 05:30またはUTC + 05:30になるため、文字列に変換する際には、日付に05 : 30時間が追加されます。

コードに間違いはありません。文字列に変換した結果の日付はgmt + 05 : 30です。

ここで、UKの誰かがこれを行うと、ローカルタイムゾーンで見つけられます。私は、彼らはあなたがutcまたは任意の特定の時間帯にORあなたは変換上記のシナリオを回避したい場合にも、あなたの文字列の値を表示したい場合は、英国のタイムゾーンは今UTC + 00 : 00またはGMT + 00 : 00

あるので、あなたがあなたの質問に期待するもの出力が得られます意味します特定のタイムゾーンを設定することができます。そのタイムゾーンの日付を文字列に変換します(下の例を参照)。しかし、通常の動作では、ユーザーにローカルタイムゾーンで日付が表示されるため、ほとんど必要としない限り、適切な方法ではありません。

例えば、

let value = "1507824000" //2017-10-12 16:00:00 +0000 
    let value2 = "1507939200" //2017-10-14 00:00:00 +0000 

    let convertedDate = Double(value) 

    let convertedEndDate = Double(value2) 

    let startdate = Date(timeIntervalSince1970: convertedDate!) 


    let enddate = Date(timeIntervalSince1970: convertedEndDate!) 
    self.showRange(between: startdate, and: enddate) 

とあなたの関数は、となります

func showRange(between startDate: Date, and endDate: Date) { 
    guard startDate < endDate else { return } 

    let calendar = Calendar.current 
    let calendarEndDate = calendar.startOfDay(for: endDate) 

    var currentDate = calendar.startOfDay(for: startDate) 

    while(currentDate <= calendarEndDate) { 
     print(currentDate) 
     currentDate = Calendar.current.date(byAdding: .day, value: 1, to: currentDate)! 
     let df = DateFormatter.init() 
     df.dateFormat = "MMM-dd-yyyy h:mm a" 
     df.timeZone = TimeZone.init(abbreviation: "BST") 

     let dateString = df.string(from: currentDate) 
     totalDaysFromServerArray.append(dateString) 

    } 
    print("\(totalDaysFromServerArray)") 
} 

そして、あなたの結果はとなり、

Oct-12-2017 7:30 PM Oct-13-2017 7:30 PM Oct-14-2017 7:30 PM 

は、これが役立つことを願っています!

+0

貴重な返事をいただきありがとうございます。しかし、タイムゾーンはデバイス設定に従っている必要がありますが表示される必要があります。 Like私のデバイスがGMTであれば、それはGMTでなければならず、他の人のデバイスはUTCのようなものであり、それはUTCフォーマットでなければならない。 –

+0

ええ、あなたのコードに何も間違っていると言っています。手動でタイムゾーンを設定しないでください! – Lion

関連する問題