如何获得当前的EST时间IOS Swift

我需要比较我的应用程序中的两个date,我有一个ESTdate与当前date进行比较,但let today = NSDate()返回UTC的date,我如何获得当前的EST时间或转换为EST?

NSDate存储绝对时间的时间,即无论您在哪个时区使用NSDate compare方法创builddate,它将尊重时区(因为时区从未存储过)。 您可以将NSDate视为从00:00:00协调世界时(UTC)1970年1月1日星期四开始计算的时代

我不知道NSDate的实现可能是它在内部以UTC存储date。

这是我们的实现( NSDateFormatter )将其格式更改为我们的要求。

所以无论你使用compare还是NSCalendar无论你如何创builddate,他们都会比较你的date

例如我的本地时区是IST,现在是2016-10-21 12:10:00

在美国东部时间2016-10-21 02:40:00,
在PST这是2016-10-20 23:40:00现在

所以这个代码

 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!)") 

将打印同一时间,因为它到处都是同一时刻

 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 

尝试这个-

 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 

如果您需要比较两个date,则可以使用下面的方法

 // 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. } 

如果你想知道所有的时区缩写可用,你可以这样做:

 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"]