简而言之,我计划通过将+0800应用于时区来获取当前的dateTime,更改时间并将其设置为马来西亚时间本地。
结果出乎意料:
-(NSDate *)departureDateTime
{
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
[components setHour: 7];
[components setMinute: 59];
[components setSecond: 17];
NSDate *newDate = [gregorian dateFromComponents: components];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-mm-dd HH:mm:ss Z"];
[dateFormat setLocale:[NSLocale currentLocale]];
NSString *newDateString = [NSString stringWithFormat:@"%@",newDate];
NSString *maskString = [NSString stringWithFormat:@"%@", [newDateString substringToIndex:20]];
NSString *append = [maskString stringByAppendingString:@"+0800"];
NSLog(@"%@",append);
NSDate *finalLocalDate = [dateFormat dateFromString:append];
return finalLocalDate;
}
结果:
for NSLog Append:2013-12-07 23:59:17 +0800
但是finalLocalDate:2013-01-07 15:59:17 +0000
答案 0 :(得分:1)
使用更短的解决方案找到了答案,所以我发布在这里以防将来帮助任何人。
要返回,问题是不同的时区,所以添加这行
[components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ];
我们将时区设置为系统时区,然后删除不必要的代码:
-(NSDate *)departureDateTime
{
NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *components = [gregorian components: NSUIntegerMax fromDate: date];
[components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:(+0*3600) ] ];
[components setHour: 7];
[components setMinute: 59];
[components setSecond: 17];
NSDate *newDate = [gregorian dateFromComponents: components];
NSLog(@"%@",newDate);
return newDate;
}
正确结果:2013-12-08 07:59:17 +0000
答案 1 :(得分:0)
试试这个:
NSTimeInterval now = [[NSDate date] timeIntervalSince1970];
NSDate *malaysianTime = [NSDate dateWithTimeIntervalSince1970:now+(8*60*60)]; //8h in seconds
答案 2 :(得分:0)
如果您的计算机以正确的时区运行,请不要设置时区。
创建newDate
值,然后 -
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
NSString* printableDate = [fmt stringFromDate:newDate];
NSLog(@"The date is %@", printableDate);
如果所需的时区不是您的计算机/手机当前使用的时区,则仅设置时区(在NSCalendar和NSDateFormatter中)。
请注意,如果直接使用NSLog newDate
,它将以GMT时区打印。这是它应该的方式 - 你总是使用NSDateFormatter作为可打印的日期。当您直接NSLog NSDate时,您可以按设计获得GMT。