2016-10-21 4 views
2

Ich muss zwei Termine in meiner App vergleichen und ich habe ein EST-Datum, um mit dem aktuellen Datum zu vergleichen, aber let today = NSDate() gibt das Datum in UTC zurück, wie kann ich aktuelle EST-Zeit erhalten oder konvertieren EUROPÄISCHE SOMMERZEIT ?How to get Aktuelle EST Zeit IOS Swift

+0

suchen Sie die Termine für den ganzen Weg bis zu der vergleichen Stunde oder siehst du aus um die Daten einfach mit dem Tag zu vergleichen? – Aaron

+1

Können Sie Ihr EST-Datum anzeigen? Ist es im String-Format oder NSDate? –

Antwort

1

Versuchen this-

import UIKit 

let date = NSDate(); 
// "Apr 1, 2015, 8:53 AM" <-- local without seconds 

var formatter = NSDateFormatter(); 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"; 
let defaultTimeZoneStr = formatter.stringFromDate(date); 
// "2015-04-01 08:52:00 -0400" <-- same date, local, but with seconds 
formatter.timeZone = NSTimeZone(abbreviation: "UTC"); 
let utcTimeZoneStr = formatter.stringFromDate(date); 
// "2015-04-01 12:52:00 +0000" <-- same date, now in UTC 

Wenn Sie zwei Tage, zu vergleichen, dann können Sie die Methode unter

// Date comparision to compare current date and end date. 
var dateComparisionResult:NSComparisonResult = NSDate().compare(endDate) 

if dateComparisionResult == NSComparisonResult.OrderedAscending 
{ 
    // Current date is smaller than end date. 
} 
else if dateComparisionResult == NSComparisonResult.OrderedDescending 
{ 
    // Current date is greater than end date. 
} 
else if dateComparisionResult == NSComparisonResult.OrderedSame 
{ 
    // Current date and end date are same. 
} 

verwenden Wenn Sie verfügbar, um alle Zeitzonen Abkürzungen wissen wollen Sie können folgendes tun:

var timeZoneAbbreviationsType: [String:String] { return TimeZone.abbreviationDictionary } 
timeZoneAbbreviationsType // ["CEST": "Europe/Paris", "WEST": "Europe/Lisbon", "CDT": "America/Chicago", "EET": "Europe/Istanbul", "BRST": "America/Sao_Paulo", "EEST": "Europe/Istanbul", "CET": "Europe/Paris", "MSD": "Europe/Moscow", "MST": "America/Denver", "KST": "Asia/Seoul", "PET": "America/Lima", "NZDT": "Pacific/Auckland", "CLT": "America/Santiago", "HST": "Pacific/Honolulu", "MDT": "America/Denver", "NZST": "Pacific/Auckland", "COT": "America/Bogota", "CST": "America/Chicago", "SGT": "Asia/Singapore", "CAT": "Africa/Harare", "BRT": "America/Sao_Paulo", "WET": "Europe/Lisbon", "IST": "Asia/Calcutta", "HKT": "Asia/Hong_Kong", "GST": "Asia/Dubai", "EDT": "America/New_York", "WIT": "Asia/Jakarta", "UTC": "UTC", "JST": "Asia/Tokyo", "IRST": "Asia/Tehran", "PHT": "Asia/Manila", "AKDT": "America/Juneau", "BST": "Europe/London", "PST": "America/Los_Angeles", "ART": "America/Argentina/Buenos_Aires", "PDT": "America/Los_Angeles", "WAT": "Africa/Lagos", "EST": "America/New_York", "BDT": "Asia/Dhaka", "CLST": "America/Santiago", "AKST": "America/Juneau", "ADT": "America/Halifax", "AST": "America/Halifax", "PKT": "Asia/Karachi", "GMT": "GMT", "ICT": "Asia/Bangkok", "MSK": "Europe/Moscow", "EAT": "Africa/Addis_Ababa"] 
+0

Ich muss beide Datum in ETC bekommen, wie kann ich? – Vishnu

+0

Überprüfen Sie meine aktualisierte Antwort – iDeveloper

2

Die NSDate speichern die Zeit in absoluten Moment, d. H. Egal in welcher Zeitzone Ihr Datum erstellt wurde, wenn Sie compare Methode von NSDate verwenden wird die Zeitzone berücksichtigt (weil Zeitzone nie gespeichert wurde). Sie können sich denken, NSDate als Epochzeit, die immer von 00:00:00 Coordinated Universal Time (UTC), Donnerstag, 1. Januar 1970

berechnet wird Ich weiß nicht über die Implementierung von NSDate kann es das Datum speichern in UTC intern.

Es ist unsere Implementierung (NSDateFormatter), die sein Format zu unserer Anforderung ändert.

Egal, ob Sie compare oder NSCalendar unabhängig verwenden, wie Sie Ihr Datum erstellt werden sie Ihnen

stammen vergleichen

z.B. Meine lokale Zeitzone ist IST und es ist 2016-10-21 12:10:00 hier gerade

In EST es ist 2016-10-21 02:40:00,
In PST ist es 2016-10-20 23 : 40: 00 jetzt

dieser Code wird

let today = NSDate() 
print("\(today)") 


let formatter = DateFormatter() 
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
formatter.timeZone = TimeZone(abbreviation: "EST") 
let estDate = formatter.date(from: "2016-10-21 02:40:00") 
print("\(estDate!)") 


formatter.timeZone = TimeZone(abbreviation: "PST") 
let pstDate = formatter.date(from: "2016-10-20 23:40:00") 
print("\(pstDate!)") 


formatter.timeZone = TimeZone(abbreviation: "IST") 
let istDate = formatter.date(from: "2016-10-21 12:10:00") 
print("\(istDate!)") 

So gleichzeitig drucken, weil es im selben Moment überall ist

2016-10-21 06:40:00 +0000 
2016-10-21 06:40:00 +0000 
2016-10-21 06:40:00 +0000 
2016-10-21 06:40:00 +0000