我正在创建一个可以访问任何地方的应用程序,所以我要说我在格林尼治标准时间上午5:30上传视频,所以如果巴基斯坦的用户看到该视频,它应该显示他在本地的时间,而不是视频上传格林尼治标准时间上午5:30我正在使用以下代码进行转换,但它对我不起作用。
NSString *dateStr = @"2013-12-17 05:30 AM";
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm a"];
NSDate *date = [dateFormatter1 dateFromString:dateStr];
NSLog(@"date : %@",date);
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@"yyyy-MM-dd HH:mm: a"];
[dateFormatter2 setTimeZone:currentTimeZone];
NSDate *dateNew = [dateFormatter2 dateFromString:dateStr];
NSLog(@"date : %@",date);
NSLog
两者分别是
date : 2013-12-16 19:30:00 +0000 2013-12-17 12:20:27.006 TimeTesting[1548:f803]
date : 2013-12-16 19:30:00 +0000
答案 0 :(得分:0)
-(NSDate *)getLocalTimeFrom:(NSDate *)GMTTime
{
NSTimeZone *tz = [NSTimeZone localTimeZone];
NSLog(@"%@",tz);
NSInteger seconds = [tz secondsFromGMTForDate: GMTTime];
NSLog(@"%ld",(long)seconds);
return [NSDate dateWithTimeInterval: seconds sinceDate: GMTTime];
}
答案 1 :(得分:0)
默认情况下,NSDateFormatter将在从字符串创建日期时使用与当前语言环境关联的时区。因此,当您使用以下方法从字符串中获取日期时:
[dateFormatter1 setDateFormat:@"yyyy-MM-dd HH:mm a"];
NSDate *date = [dateFormatter1 dateFromString:dateStr];
您无意中使用手机的区域设置时区创建了日期,因此格林尼治标准时间8AM的值在用户的时区变为8AM,而不是格林尼治标准时间上午8点。 要纠正此问题,您需要设置日期格式化程序的区域设置,用于创建日期格式为GMT 0,如下面的代码所示:
NSString *dateStr = @"2013-12-17 05:30 AM";
NSDateFormatter *df = [[NSDateFormatter alloc]init];
//explicitly set the timezone for the date formatter, so it will treat dates parsed in as GMT 0
[df setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[df setDateFormat:@"yyyy-MM-dd HH:mm a"];
NSDate *date = [df dateFromString:dateStr];
NSLog(@"GMT date : %@",[df stringFromDate:date]);
//create a new date formatter to use in displaying in the UI, which by default will use the user's locale and timezone
NSDateFormatter *userLocaleDF = [[NSDateFormatter alloc]init];
[userLocaleDF setDateFormat:@"yyyy-MM-dd HH:mm a"];
NSLog(@"date in user's locale/timezone: %@",[userLocaleDF stringFromDate:date]);