gpt4 book ai didi

ios - Swift 在将 NSString 转换为 NSDate 时显示与 Objective-C 不同的结果?

转载 作者:行者123 更新时间:2023-11-29 01:07:18 26 4
gpt4 key购买 nike

我使用 Objective-C 编写了一些代码可以帮助我将 NSString 转换为 NSDate,但我发现了一些有趣的东西!!!

这是我的代码:

NSString *string = @"周四 3月 24 14:44:00 +0800 2016";
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"EEE MMM dd HH:mm:ss Z yyyy";
fmt.timeZone = [NSTimeZone timeZoneWithName:@"CCT"];
fmt.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
NSDate *date = [fmt dateFromString:string];
NSLog(@"%@", date);

结果是

2016-03-24 06:44:00 +0000

但是我用swift来写同样的东西

var string = "周四 3月 24 14:44:00 +0800 2016"
var fmt = NSDateFormatter();
fmt.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
fmt.timeZone = NSTimeZone(name: "CCT")
fmt.locale = NSLocale(localeIdentifier:"zh")
fmt.dateFromString(string);

结果是

"Mar 24, 2016, 2:44 PM"

你会发现 swift 给了我们正确的时间,但 Objective-C 似乎不正确。

那么,代码有什么问题?

最佳答案

这有两个部分。您有一个日期格式化程序,用于将日期字符串转换为 NSDate。

然后您需要一些方法将该日期显示为字符串。如果您使用 NSLog 显示日期,它会通过调用对象的 description 方法转换为字符串。

不要那样做。相反,通过日期格式化程序的 stringFromDate 方法提供结果日期。

所以你可以使用:

NSDate *date = [fmt dateFromString:string];
NSLog(@"date = %@", [fmt stringFromDate: date];

或者来自 Swift:

if let date = fmt.dateFromString(string)
{
print("date = /(fmt.stringFromDate(date))"
}

这将在两者中给出相同的结果 - 原始日期字符串。或者,您可以创建一个单独的输出日期格式化程序,它使用不同的语言环境和/或格式字符串,并使用它来显示您的结果。

编辑:

您可以创建一个纯粹用于调试的日期格式化程序。这是 Objective-C 版本:

- (NSDateFormatter *) debugDateFormatter;
{
if (!_debugDateFormatter)
{
_debugDateFormatter = [[NSDateFormatter alloc] init];
_debugDateFormatter.dateStyle = NSDateFormatterShortStyle;
_debugDateFormatter.timeStyle = NSDateFormatterShortStyle;
}
return _debugDateFormatter;

}

然后你会使用:

NSDate *date = [fmt dateFromString:string];
NSLog(@"date = %@", [self.debugDateFormatter stringFromDate: date];

或者在 Swift 中

class Foo: NSObject
{
lazy var debugDateFormatter: NSDateFormatter =
{
() -> NSDateFormatter in
let debugDateFormatter = NSDateFormatter()
debugDateFormatter.dateStyle = .MediumStyle
debugDateFormatter.timeStyle = .MediumStyle
return debugDateFormatter
}()

func showDate(date: NSDate)
{
print( "date = \(debugDateFormatter.stringFromDate(date))")
}
}

let aFoo = Foo()

aFoo.showDate(NSDate())

(在上面的代码中,我创建了一个 Foo 类,只是作为定义我的惰性 NSDateFormatter debugDateFormatter 的地方。您的惰性变量 debugDateFormatter 可能会进入任何需要它的类.)

关于ios - Swift 在将 NSString 转换为 NSDate 时显示与 Objective-C 不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36198428/

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