Objective c 如何获得系统时间和目标时区作为输入的(hh:mm)?
例如,如果用户的系统时钟为上午10:00(太平洋标准时间时区)。如何在Objective-C中将其转换为13:00(东部时间时区) 最终目标是找到一个时间间隔检查器Objective c 如何获得系统时间和目标时区作为输入的(hh:mm)?,objective-c,Objective C,例如,如果用户的系统时钟为上午10:00(太平洋标准时间时区)。如何在Objective-C中将其转换为13:00(东部时间时区) 最终目标是找到一个时间间隔检查器 -(BOOL)isCurrentTimeBetweenStart:(NSString *)startTimeStr endTime:(NSString *)endTimeStr timezone:(NSString*)timezone{ NSDateFormatter *formatter = [[NSDateFormat
-(BOOL)isCurrentTimeBetweenStart:(NSString *)startTimeStr endTime:(NSString *)endTimeStr timezone:(NSString*)timezone{
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"hh:mm a"];
NSDateFormatter *formatterEST = [[NSDateFormatter alloc]init];
[formatterEST setDateFormat:@"hh:mm a"];
[formatterEST setTimeZone:[NSTimeZone timeZoneWithName:timezone]];
NSString *currentTimeStr = [formatterEST stringFromDate: [NSDate date]];
int startTimeMinutes = [self minutesSinceMidnight:[formatter dateFromString:startTimeStr]];
int endTimeMinutes = [self minutesSinceMidnight:[formatter dateFromString:endTimeStr]];
int currentTimeMinutes = [self minutesSinceMidnight:[formatter dateFromString:currentTimeStr]];
if (startTimeMinutes <= currentTimeMinutes && currentTimeMinutes <= endTimeMinutes) {
return YES;
}
return NO;
}
-(NSDate *) toLocalTime : (NSDate *)date
{
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: date];
return [NSDate dateWithTimeInterval: seconds sinceDate: date];
}
-(int) minutesSinceMidnight:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate:date];
return 60 * (int)[components hour] + (int)[components minute];
}
日期在内部以GMT(UTC)为参考进行存储。在创建日期时,默认使用用户本地时区,将数据转换为字符串表示时也是如此 如果要在另一个时区中使用字符串表示,请使用
NSDateFormatter
设置所需的时区。使用并设置其时区
属性,如下所示:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterNoStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
formatter.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSString *timeString = [formatter stringFromDate:someDate];
请注意,NSTimeZone确实有一个+TimeZoneWithAbRevision:
方法,它接受诸如“EST”之类的字符串,但文档本身建议不要使用它:
一般来说,除了“UTC”或“GMT”等独特实例外,不鼓励您使用缩写。时区缩写没有标准化,因此给定的缩写可能有多种含义,例如,“EST”指美国和澳大利亚的东部时间
您可以使用+knownTimeZoneNames
获取可用时区名称的列表,如果需要,允许用户从该列表中选择要使用的时区
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateStyle = NSDateFormatterNoStyle;
formatter.timeStyle = NSDateFormatterShortStyle;
formatter.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSString *timeString = [formatter stringFromDate:someDate];