gpt4 book ai didi

ios - 格式化 NSDate 对象会改变时区

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:49 24 4
gpt4 key购买 nike

我使用以下代码获取用户时区的当前 NSDate

-(NSDate *)getCurrentDateinLocalTimeZone
{
NSDate* sourceDate = [NSDate date];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] ;

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

return [dateFormatter dateFromString: [dateFormatter stringFromDate:destinationDate]];
}

在我的应用程序中的其他一些地方,出于 UI 目的,我想将日期格式设置为“HH:mm”,所以我使用以下方法

-(NSString *)formatDate:(NSDate *)date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
dateFormatter.dateFormat = @"HH:mm";
return [dateFormatter stringFromDate:date];
}

如果第二种方法的输出与第一种方法的结果相差 3 小时,我只想更改 NSDate 的格式而不是时间,我做错了什么?

最佳答案

getCurrentDateinLocalTimeZone 方法调整时区的日期,使用截断时区的格式字符串对其进行格式化,然后解析格式化的字符串。结果NSDate为UTC时区(2012-07-15 16:28:23 +0000中的+0000表示UTC时间). formatDate: 方法使用为本地时区设置的 dateFormatter,产生不同的时间。您应该将格式化程序设置为使用 UTC 来获取正确的时间:替换

[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

formatDate: 方法中。

关于ios - 格式化 NSDate 对象会改变时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com