NSDateFormatter 时区格式错误

NSDateFormatter formats wrong for timezone

我的日期格式有问题

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"YYYY-MM-dd hh:mm:ssZZ"];
formatedDate =[format stringFromDate:datePicker.date];

一切正常,除了一件事 当我将 YEAR 设置为小于或等于 1924 时,DateFormatter returns

1924-04-21 03:00:07+050748

而应该是

1924-04-21 03:00:07+0500

怎么了?

您可以像 GMT 一样设置时区,

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"yyyy-MM-dd hh:mm:ssZZ"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[format setTimeZone:gmt];
formatedDate =[format stringFromDate:datePicker.date];

这可能会改变您在输出字符串中的时间 formatedDate,但您可以根据需要设置 NSTimeZone

你可以看苹果数据格式化指南https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html 在"Fixed Formats", 这个例子有两点需要注意:

它使用 yyyy 来指定年份部分。一个常见的错误是使用 YYYY。 yyyy 指定日历年,而 YYYY 指定年份(“一年中的第几周”),用于 ISO 年-周日历。在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常您应该使用日历年。 时间的表示可能是13:00。但是,在 iOS 中,如果用户将 24 小时制切换为关闭,时间可能是 1:00 下午。

所以您应该将 "YYYY" 更改为 "yyyy"。

使用此方法......

-(NSString*) currentDateForServer 
 {
   NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
   NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:UTC];
   [dateFormat setTimeZone:timeZone];
   [dateFormat setDateFormat:DATE_FORMATE];
   NSDate *currentDate = [NSDate date];
   NSString *finalString = [dateFormat stringFromDate:currentDate];
   return finalString;
}
  • 根据需要定义 UTC 和 DATE_FORMATE