Dateformatter会给出错误的会话时间

时间:2013-12-23 06:27:14

标签: ios objective-c nsdate nsdateformatter

我正在尝试将我的日期字符串转换为NSDate,但它返回正确的日期和错误的时间。

这是我的代码:

    NSString *dateStr = @"2013-12-20 12:10:40";

    // Convert string to date object
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
    NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

    NSLog(@"lastUpdatedate : %@",lastUpdatedate);

它返回:

lastUpdatedate : 2013-12-20 06:40:40 +0000

4 个答案:

答案 0 :(得分:2)

- [NSDate description](将其传递给NSLog时调用)始终以GMT时区打印日期对象,而不是本地时区。如果您想要准确的字符串表示日期,请使用日期格式化程序根据您的时区创建正确的字符串。

答案 1 :(得分:2)

正如@Leo Natan所说,- [NSDate description]总是在GMT时区给出日期。如果要转换为本地时区,请使用以下代码。

NSString *dateStr = @"2013-12-20 12:10:40";

// Convert string to date object
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

NSLog(@"lastUpdatedate : %@",[self getLocalTime:lastUpdatedate]);



-(NSDate *) getLocalTime:(NSDate *)date {
    NSTimeZone *tz = [NSTimeZone defaultTimeZone];
    NSInteger seconds = [tz secondsFromGMTForDate: date];
    return [NSDate dateWithTimeInterval: seconds sinceDate: date];
}

输出:

lastUpdatedate:2013-12-20 12:10:40 +0000

答案 2 :(得分:1)

NSString *dateStr = @"2013-12-20 12:10:40";
NSDateFormatter *dateFormatterTest = [[NSDateFormatter alloc] init];
[dateFormatterTest setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
[dateFormatterTest setLocale:[NSLocale currentLocale]];
NSDate *d = [dateFormatterTest dateFromString:dateStr];

在您的代码中设置NSLocale,您将获得完美的结果。

答案 3 :(得分:0)

你可以试试这个:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *lastUpdatedate = [dateFormatter dateFromString:dateStr];

NSTimeInterval sourceGMTOffset = [[NSTimeZone systemTimeZone] secondsFromGMTForDate:lastUpdatedate];

lastUpdatedate = [lastUpdatedate dateByAddingTimeInterval:sourceGMTOffset];

NSLog(@"lastUpdatedate : %@",lastUpdatedate);