Objective c 时区休息一小时

Objective c 时区休息一小时,objective-c,macos,nsdate,nsdateformatter,nstimezone,Objective C,Macos,Nsdate,Nsdateformatter,Nstimezone,我正在使用一个遗留的OSX应用程序修复一个时间戳为1小时的错误。我主要是一名C#开发人员,以前没有使用Objective-C的经验,因此我不知道自己在做什么。:) 这是使用当前时间创建NSString的帮助函数: + (NSString*)formattedDate { NSDateFormatter *formatter; NSString *dateString; formatter = [[NSDateFormatter alloc] init]; [formatter s

我正在使用一个遗留的OSX应用程序修复一个时间戳为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;
}

“[dateString stringByReplacingOccurrencesOfString:@”“with string:@“T”;”只需添加
'T'
,而不是
setDateFormat:
中的空格。您当前的代码没有添加“000000”,可以通过在
setDateFormat:
中添加“ssss”并使用
ZZZZZ
+01:00
进行更改?但这有待检验。