有 2 个重要的参数分别起作用:时间和时区。
例如:越南使用 GMT+7
如果我知道越南的时间是上午 9:00,那么 GMT 时间就是凌晨 2:00。
当您从设备获取日期时,您将获取时间和时区: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 日期。
所以,如果您有 GMT+7: 9:00 AM 并且您想打印 GMT+3: 5:00 AM,您有 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]);
这是最简单的方法。如果您总是在 GMT+7 并且您需要 GMT+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(东非时间),您可以将时区设置为 EAT:[NSTimeZone timeZoneWithName:@"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.