我正在尝试将时间从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/

10-12 05:55