我正在使用传统的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;
}