我正在尝试将时间从GMT+7
格式化为GMT+3
:
我正在使用世界上特定国家/地区的时钟构建一个应用程序(用户将位于GMT+7
,我想表示GMT+3
的时间)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:118800];
NSLocale *USLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:USLocale];
NSLog(@"Date for locale %@: %@",
[[dateFormatter locale] localeIdentifier], [dateFormatter stringFromDate:date]);
我对
NSDate
类引用进行了深入研究,但我不知道如何实现。请有人帮助我,我将不胜感激。
最佳答案
有两个重要的参数可以分别工作:时间和时区。
例如:越南使用GMT + 7
如果我知道越南时间是9:00 AM,那么格林尼治标准时间是2:00 AM。
从设备上获取日期后,您将获得时间和时区:YYYY-MM-DD HH:MM:SS ±HHMM
。其中±HHMM是时区,距GMT时数小时和数分钟。
通常,您只使用时间。但是,使用NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"]
,您可以告诉NSDateFormatter
您希望GMT时间与您当地的时区相关。因此,具有:
NSDateFormatter *dt = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
[dt setTimeZone:timeZone];
您可以获取当地时区日期的GMT日期。
因此,如果您的格林尼治标准时间+7:上午9:00,并且要打印格林尼治标准时间+3:上午5:00,则有3种可能性:
NSDate *localDate = [NSDate date];
选项1
添加一个-4小时的时间间隔:
NSTimeInterval secondsInFourHours = -4 * 60 * 60;
NSDate *dateThreeHoursAhead = [localDate dateByAddingTimeInterval:secondsInFourHours];
NSDateFormatter *dt = [[NSDateFormatter alloc] init];
[dt setDateFormat:@"h:mm a"];
NSLog(@"GMT+7(-4) = %@", [dt stringFromDate:dateThreeHoursAhead]);
这是最简单的方法。如果您始终是格林尼治标准时间+7,并且需要格林尼治标准时间+3,则此时间间隔为-4小时。
选项2
将时间设置为GMT时区,然后添加+3小时时间间隔。最简单的方法是先添加3小时,然后将时间移至GMT:
NSTimeInterval secondsInThreeHours = 3 * 60 * 60;
NSDate *dateThreeHoursAhead = [localDate dateByAddingTimeInterval:secondsInThreeHours];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"h:mm a"];
NSString *date = [dateFormatter stringFromDate:dateThreeHoursAhead];
NSLog(@"GMT+3 = %@", date);
选项3
这是更好的选择。 GMT + 3是EAT(东非时间),您可以使用
[NSTimeZone timeZoneWithName:@"EAT"]
将时区设置为EAT。NSDateFormatter *dt = [[NSDateFormatter alloc] init];
[dt setDateFormat:@"h:mm a"];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"EAT"];
[dt setTimeZone:timeZone];
NSLog(@"EAT = %@", [dt stringFromDate:localDate]);
选项3总是检索GMT + 3
An example code here。
关于ios - iPhone日期格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23232193/