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
我的日期格式有问题
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