Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get current iPhone device timezone date and time from UTC-5 timezone date and time iPhone app?

In my iPhone application i am very struggling to convert the webservice response time to current device time. The webservice time in UTC-5 timezone. The app is worldwide use app. So i have to convert the response time to current device timezone. This is simple messaging app.

When i have sent a message the time is "5:05 PM" (India Chennai timezone) but when am retrieve time from webservice is "2012-07-16 07:33:01". When i show the time in the app i should convert the time to device's local time. I have tried in some way but i can't solve yet. Code is:

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); 

But the output date and time is 2012-07-16 02:03:01 +0000 I have stored this date/time in Coredata and when I have retrieve from CoreData and covert to NSString using the below code,

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); 

The output date and time is "Today 7:33 AM". It should be show "Today 5:05 PM". Can anyone please save my day? Please help to solve this issue. Thanks in advance.

like image 934
Gopinath Avatar asked Jul 16 '12 12:07

Gopinath


People also ask

How do I get UTC time on my iPhone?

You can set your entire phone manually to any time zone you desire. Simply select manual updates and pick UTC time zone. Settings -> Time & Date.

How do I get the current time on my iPhone?

Go to Settings > General > Date & Time. Turn on any of the following: Set Automatically: iPhone gets the correct time over the network and updates it for the time zone you're in. Some networks don't support network time, so in some countries or regions, iPhone may not be able to automatically determine the local time.

Why is my iPhone showing the wrong time zone?

Open the “Settings” app and go to “General”, then to “Date & Time” Toggle the switch for “Set Automatically” to the ON position (if this is already set ON, turn it OFF for about 15 seconds, then toggle it back ON to refresh) Be sure the Time Zone setting is set properly for your region. Exit out of Settings.


2 Answers

I have tested your scenario and added some code for your reference. Please test the below and please let me know it is useful for you.

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); 

Thanks.

like image 104
Yuvaraj.M Avatar answered Sep 18 '22 12:09

Yuvaraj.M


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); 

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

Hope it helps to another developers ! Happy Coding !

like image 31
Mahesh Cheliya Avatar answered Sep 22 '22 12:09

Mahesh Cheliya