时差一小时

Timezone one hour off

我正在使用遗留 OS X 应用程序来修复时间戳延迟 1 小时的错误。我主要是一名 C# 开发人员,之前没有使用 Objective-C 的经验,所以我真的不知道自己在做什么。 :)

这是用当前时间创建 NSString 的辅助函数:

+ (NSString*)formattedDate {
NSDateFormatter *formatter;
NSString        *dateString;

formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss."];
dateString = [formatter stringFromDate:[NSDate date]];

dateString = [dateString stringByReplacingOccurrencesOfString:@" " withString:@"T"];
dateString = [dateString stringByAppendingString:@"0000000+01:00"];

return dateString;
}

我猜是附加“0000000+01:00”的那一行将时区设置为 GMT+1?在夏季,这里的时区是 GMT+2,所以至少可以解释一下。

正确的解决方法应该是这样的:

+ (NSString*)formattedDate {
NSDateFormatter *formatter;
NSString        *dateString;

formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss."];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:[[NSTimeZone localTimeZone] abbreviation]]];
dateString = [formatter stringFromDate:[NSDate date]];

dateString = [dateString stringByReplacingOccurrencesOfString:@" " withString:@"T"];

return dateString;
}

或者这会做一些与追加不同的事情吗?

日期字符串作为 XML 消息的一部分从客户端应用程序发送到服务器应用程序。

我将代码更新为以下内容,并且有效:

+ (NSString*)formattedDate {
    NSDateFormatter *formatter;
    NSString        *dateString;

    formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ"];

    dateString = [formatter stringFromDate:[NSDate date]];

    return dateString;
}