1

我有一个UTC格式的字符串日期:

“2012-11-20T05:23:02.34”

现在我想要 UTC NSDate 对象……我实现了这个功能。

+ (NSDate *)utcDateFromString:(NSString *)string withFormat:(NSString *)format {
    NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
    inputFormatter.timeZone =[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
    [inputFormatter setDateFormat:format];
    NSDate *date = [inputFormatter dateFromString:string];
    [inputFormatter release];
    return date;
}

并这样称呼它......

NSDate* submittedDate =[NSDate utcDateFromString:submittedDateString withFormat:@"YYYY-MM-dd'T'HH:mm:ss.SS"];

但这会返回 NSDate 描述为 this..

2011-11-20 05:23:02 +0000

现在,如果您注意到日期相差一年……谁能解释为什么会发生这种情况……?

谢谢你的帮助。

4

2 回答 2

5

在 dateformmater 中,使用yyyy而不是YYYY

它应该是

NSDate* submittedDate =[NSDate utcDateFromString:submittedDateString withFormat:@"yyyy-MM-dd'T'HH:mm:ss.SS"];

这将解决问题。

在以下链接中,搜索 YYYY。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

它使用 yyyy 来指定年份组件。一个常见的错误是使用 YYYY。yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周日历。在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常,您应该使用日历年。

于 2012-12-07T07:46:03.540 回答
1

试试下面这个方法。。

-(NSDate *)getUTCFormateDate:(NSString *)localDate withFormat:(NSString *)format 
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:format];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
    [dateFormatter setTimeZone:timeZone];
    NSDate *date = [dateFormatter dateFromString:localDate];
    return date;        
}

并像下面这样使用..

    NSDate *dateHere = [[NSDate alloc]init];
    dateHere = [self getUTCFormateDate:@"2012-11-20T05:23:02.34" withFormat:@"yyyy-MM-dd'T'HH:mm:ss.SS"];
    NSLog(@"Date here %@",dateHere);

我得到的输出是这里的日期 2012-11-20 05:23:02 +0000

请参阅我的另一个答案,它以 UTF 格式返回字符串日期。

将 NSstring 日期转换为 UTC 日期在此处输入链接描述

于 2012-12-07T07:28:26.963 回答