2016-10-21 17 views
2

私のアプリで2つの日付を比較する必要があり、現在の日付と比較するEST日付がありますが、let today = NSDate()は現在のEST時間を取得するか、 EST(東部基準時 ?現在のEST時間を取得する方法

+0

はあなたが最大の日付のすべての方法を比較するために探していますあなたは見ていますか?単純に日付を比較することはできますか? – Aaron

+1

ESTの日付を表示できますか?それは文字列形式かNSDateですか? –

答えて

1

は、2つの日付を比較する必要がある場合は、可能なすべてのタイムゾーンの省略形を知りたい場合は、あなたが

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

下の方法を使用することができます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 

をお試しくださいあなたは次のようにすることができます:

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

私はETCで両方の日付を取得する必要があります、どうすればいいですか? – Vishnu

+0

更新された回答を確認する – iDeveloper

2

NSDateNSDateは時刻を絶対的な時間に格納します。つまり、compareの方法をNSDateとして使用したときに作成された日付とは関係なく、タイムゾーンは保存されないためです。 NSDateは、常に00:00:00から計算されるエポック時間と考えることができます。1970年1月1日木曜日、

NSDateの実装についてはわかりませんが、内部ではUTCにあります。

私たちの実装(NSDateFormatter)は、私たちの要件に合わせてフォーマットを変更したものです。

あなたがcompareNSCalendarを使用するかどうかにかかわらず、あなたはあなたの日付を作成したどのように彼らはあなたが、例えば

を日付と比較しますので現地時間帯はISTです.2016-10-21 12:10:00ここに今すぐ

ESTで2016-10-21 02:40:00、
PST it's 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 
関連する問題