将 GMT 时间转换为本地时间的问题
Posted
技术标签:
【中文标题】将 GMT 时间转换为本地时间的问题【英文标题】:Issue in coverting GMT time to Local time 【发布时间】:2013-05-04 17:43:22 【问题描述】:我当前的设备时间是 --- 2013-05-09 10:23 AM
我用下面的代码将它转换为 GMT
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"time in GMT ------ %@",timeStamp);
我得到了输出
time in GMT ------ 2013-05-10 04:53 AM
然后我找到了我的时区
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
NSLog(@"local timezone is------ %@",[localTime name]);
输出
local timezone is------ Asia/Kolkata
现在我需要将上面的格林威治时间转换为本地时间。我使用了以下代码
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:[localTime name]];
[dateFormatter setTimeZone:sourceTimeZone];
NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
NSLog(@"local time is ------- %@",dateFromString);
但是我的输出是错误的..
local time is ------- 2013-05-09 19:23:00 +0000
为什么会这样? 我应该得到当地时间 - 2013-05-09 10:23 AM
【问题讨论】:
【参考方案1】:您的timestamp
字符串是格林威治标准时间。这意味着当您想要将 GMT 字符串转换回 NSDate
时,您的日期格式化程序需要设置为 GMT,而不是您的本地时区。通过这样做,您将获得正确的NSDate
。
并且不要忘记,当您记录 NSDate
对象时,它会以 GMT 显示,而不考虑其他任何内容。
【讨论】:
【参考方案2】:// 获取当前日期/时间
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *currentTime = [dateFormatter stringFromDate:today];
[dateFormatter release];
NSLog(@"User's current time in their preference format:%@",currentTime);
【讨论】:
这些都不能解决这个问题。这并不能解释为什么最终输出显示错误的时间。【参考方案3】:亲爱的,请不要在 google 上做一些努力,这意味着首先在 google 上搜索您的问题,如果在这种情况下您没有得到答案,请将您的问题放在 stackover flow 上。 并在下面的链接中查看您的答案....
-
iPhone: NSDate convert GMT to local time
iphone time conversion gmt to local time
Date/time conversion to user's local time - issue
【讨论】:
【参考方案4】:NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"time in GMT ------ %@",timeStamp);
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
NSLog(@"local timezone is------ %@",[localTime name]);
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:sourceTimeZone];
NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
NSLog(@"local time is ------- %@",dateFromString);
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
dateFormatter1.dateFormat = @"yyyy-MM-dd HH:mm";
NSTimeZone *gmt1 = [NSTimeZone localTimeZone];
[dateFormatter1 setTimeZone:gmt1];
NSString *timeStamp1 = [dateFormatter1 stringFromDate:[NSDate date]];
NSLog(@"local time is ------- %@",timeStamp1);
输出:
time in GMT ------ 2013-05-10 05:13 AM
local timezone is------ Asia/Kolkata
local time is ------- 2013-05-10 00:13:00 +0000
local time is ------- 2013-05-10 10:43
【讨论】:
这不能回答问题。目标是将timestamp
正确转换回NSDate
。【参考方案5】:
尝试使用此代码:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm a"];
// get time zone
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDate *date = [NSDate date];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
date = [dateFormatter dateFromString:timeStamp];
// change time zone
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Kolkata"]];
// or you can use SystemTimeZone
// [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSString *strDateWithLocalTimeZone = [dateFormatter stringFromDate:date];
NSLog(@"Local Time Zone Date %@", strDateWithLocalTimeZone);
【讨论】:
以上是关于将 GMT 时间转换为本地时间的问题的主要内容,如果未能解决你的问题,请参考以下文章