Objective c 时区休息一小时
我正在使用一个遗留的OSX应用程序修复一个时间戳为1小时的错误。我主要是一名C#开发人员,以前没有使用Objective-C的经验,因此我不知道自己在做什么。:) 这是使用当前时间创建NSString的帮助函数: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
+ (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
进行更改?但这有待检验。