时区一小时关闭

问题描述 投票:0回答:1

我正在使用传统的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消息的一部分从客户端应用程序发送到服务器应用程序。

objective-c macos nsdate nsdateformatter nstimezone
1个回答
0
投票

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

+ (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;
}
© www.soinside.com 2019 - 2024. All rights reserved.