2012-07-16 125 views
31

在我的iPhone應用程序中,我非常努力地將web服務響應時間轉換爲當前設備時間。 webservice time in UTC-5 timezone。該應用程序是全球使用應用程序所以我必須將響應時間轉換爲當前設備時區。這是簡單的消息應用程序。從UTC-5時區日期和時間獲取iPhone設備的時區日期和時間iPhone應用程序?

當我發送message the time is "5:05 PM" (India Chennai timezone)但是當我從webservice is "2012-07-16 07:33:01"檢索時間。當我在應用程序中顯示時間時,我應該將時間轉換爲設備的當地時間。我以某種方式嘗試過,但還不能解決。代碼是:

NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[dateFormatter1 setLocale:[NSLocale currentLocale]]; 
//[dateFormatter1 setTimeZone:[NSTimeZone timeZoneWithName:@"IST"]]; 
[dateFormatters setTimeZone:[NSTimeZone systemTimeZone]]; 
NSDate *date = [dateFormatter1 dateFromString:dateStr]; 
NSLog(@"date : %@",date); 

但輸出日期和時間是2012-07-16 02:03:01 +0000我都存放在此日期/時間在Coredata,當我從CoreData和隱蔽檢索到NSString使用下面的代碼,

NSDateFormatter *dateFormatters = [[NSDateFormatter alloc] init]; 
[dateFormatters setDateFormat:@"dd-MMM-yyyy hh:mm"]; 
[dateFormatters setDateStyle:NSDateFormatterShortStyle]; 
[dateFormatters setTimeStyle:NSDateFormatterShortStyle]; 
[dateFormatters setDoesRelativeDateFormatting:YES]; 
[dateFormatters setTimeZone:[NSTimeZone systemTimeZone]]; 
dateStr = [dateFormatters stringFromDate:dateString]; 
NSLog(@"DateString : %@", dateStr); 

輸出日期和時間是「Today 7:33 AM」。它應該顯示「Today 5:05 PM」。任何人都可以保存我的一天嗎?請幫助解決這個問題。提前致謝。

+2

我看到一對夫婦錯別字是擔心我,在你的第二塊和情況不一致的MMM爲月兩者之間小時塊 – Eric 2012-07-16 13:03:58

+0

@Eric謝謝。但是,我不明白你在說什麼?你能解釋一下嗎?謝謝。 – Gopinath 2012-07-16 13:06:36

+0

發佈從webcervice收到的時間格式的確切示例,您需要將時區文字添加到格式字符串。 – 2012-07-16 13:06:58

回答

74

我測試了您的場景並添加了一些代碼供您參考。請測試下面,請讓我知道它對你有用。

NSString *dateStr = @"2012-07-16 07:33:01"; 
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init]; 
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
NSDate *date = [dateFormatter1 dateFromString:dateStr]; 
NSLog(@"date : %@",date); 

NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; 
NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 

NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:date]; 
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date]; 
NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset; 

NSDate *destinationDate = [[[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:date] autorelease]; 

NSDateFormatter *dateFormatters = [[NSDateFormatter alloc] init]; 
[dateFormatters setDateFormat:@"dd-MMM-yyyy hh:mm"]; 
[dateFormatters setDateStyle:NSDateFormatterShortStyle]; 
[dateFormatters setTimeStyle:NSDateFormatterShortStyle]; 
[dateFormatters setDoesRelativeDateFormatting:YES]; 
[dateFormatters setTimeZone:[NSTimeZone systemTimeZone]];   
dateStr = [dateFormatters stringFromDate: destinationDate]; 
NSLog(@"DateString : %@", dateStr); 

謝謝。

+1

@Yuvaraj。M,你是否願意爲偏移和間隔計算的三條線添加一些註釋?我不太喜歡。 – 2013-03-13 20:46:36

+0

真棒回答,@ yuvaraj – 2015-02-06 05:37:18

+0

這些計算是否照顧DST?如果沒有,那麼請告訴我我該如何照顧DST。 – 2015-04-14 06:09:54

7
NSDate* currentDate = [NSDate date]; 

NSTimeZone* CurrentTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* SystemTimeZone = [NSTimeZone systemTimeZone]; 

NSInteger currentGMTOffset = [CurrentTimeZone secondsFromGMTForDate:currentDate]; 
NSInteger SystemGMTOffset = [SystemTimeZone secondsFromGMTForDate:currentDate]; 
NSTimeInterval interval = SystemGMTOffset - currentGMTOffset; 

NSDate* TodayDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:currentDate]; 
NSLog(@"Current time zone Today Date : %@", TodayDate); 

斯威夫特4

var currentDate = Date() 
var CurrentTimeZone = NSTimeZone(abbreviation: "GMT") 
var SystemTimeZone = NSTimeZone.system as NSTimeZone 
var currentGMTOffset: Int? = CurrentTimeZone?.secondsFromGMT(for: currentDate) 
var SystemGMTOffset: Int = SystemTimeZone.secondsFromGMT(for: currentDate) 
var interval = TimeInterval((SystemGMTOffset - currentGMTOffset!)) 
var TodayDate = Date(timeInterval: interval, since: currentDate) 
print("Current time zone Today Date : \(TodayDate)") 

希望它可以幫助到其他開發商!快樂編碼!

+0

你可以把它張貼在迅速? – Chandni 2018-02-15 17:04:26

+0

@Chandni - 可以幫助你 - [UTC/GMT⟺本地](https://stackoverflow.com/questions/11504843/get-current-iphone-device-timezone-date-and-time-from-utc-5 -timezone-日期和TI/48867259#48867259) – Krunal 2018-02-19 13:27:40

1

這個擴展可能會更容易。

斯威夫特4:UTC/GMT⟺本地(電流/系統)

extension Date { 

    // Convert local time to UTC (or GMT) 
    func toGlobalTime() -> Date { 
     let timezone = TimeZone.current 
     let seconds = -TimeInterval(timezone.secondsFromGMT(for: self)) 
     return Date(timeInterval: seconds, since: self) 
    } 

    // Convert UTC (or GMT) to local time 
    func toLocalTime() -> Date { 
     let timezone = TimeZone.current 
     let seconds = TimeInterval(timezone.secondsFromGMT(for: self)) 
     return Date(timeInterval: seconds, since: self) 
    } 

} 


// Try it 
let utcDate = Date().toGlobalTime() 
let localDate = utcDate.toLocalTime() 

print("utcDate - (utcDate)") 
print("localDate - (localDate)")