我正在尝试将设备当前时间转换为区域(America/New_york
)
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
NSDate *start = [NSDate date];
start
现在设备当前时间为IST
。如何将其转换为“ America ”区域
我打算做以下
start = [dateFormatter dateFromString:<start date String>];
根据时间段将一天分为3个部分。
Say 08:00 - 15:00 AS PHASE1
15:00 - 17:00 AS PHASE2
17:00 - 20:00 AS PHASE3
20:00 - 08:00 AS TRANSITION PHASE and can be ignored.
我只是接受设备的日期并附加时间字符串以确定它在哪个阶段。
示例:印度时间是05-FEB-2014 01:25 AM(设备日期)
将15:00
视为第一个截止值。我将“05-FEB-2014
”附加到15:00
并将其消化为美国时区..哪个结果并给了我06-FEB-2014 02:30 IST
(截止日期)..所以这两天之间的差异大于一天!
我的预期结果也可能是美国时区的设备时间,并与最近的截止时间进行比较。
答案 0 :(得分:6)
NSDate
没有时区。这是一个在任何地方都有效的单一时间参考。它基本上只是NSTimeInterval
的对象包装器 - 它存储的所有内容都是自引用日期以来的秒数。时区仅在转换为用户可见字符串/从用户可见字符串转换时适用。
您可以从日期格式化程序中获取用户可见的字符串
NSString *localizedDateString = [dateFormatter stringFromDate:start];
但将NSDate
转换为特定时区并非有意义的目标。 <{1}}上没有时区,因此它不是可以应用的转化。
答案 1 :(得分:5)
纽约的日期:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
[dateFormatter setTimeZone:timeZone];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date : %@", dateString);
所有区域的日期:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];
for (NSString *name in timeZoneNames) {
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:name];
[dateFormatter setTimeZone:timeZone];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"timeZone abbreviation : %@\nName : \"%@\"\nDate : %@\n\n", [timeZone abbreviation], name, dateString);
}
答案 2 :(得分:1)
请参阅dateformatter中的stringFromDate
方法。您传入NSDate
并转换为指定的格式。
更新:以下是设置当前时区的方式[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];