NSDate格式化程序格式错误的时区



我对日期格式有问题

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

一切正常,除了一件事当我将 YEAR 设置为小于或等于 1924 年时,日期格式化程序返回

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

而应该是

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

怎么了?

您可以查看 Apple 数据格式化指南 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html在"固定格式"中,关于此示例,有两点需要注意:

它使用 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

您可以设置时区,就像使用格林威治标准时间一样,

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

最新更新