如何正确使用时区



我在iOS

的swift 4中有以下代码
    var dateComponents = DateComponents()
    var datetime = Date()
    dateComponents.timeZone = Calendar.current.timeZone
    dateComponents.day = Calendar.current.component(.day, from: datetime)
    dateComponents.month = Calendar.current.component(.month, from: datetime)
    dateComponents.year = Calendar.current.component(.year, from: datetime)
    dateComponents.hour = 12
    dateComponents.minute = 45 
    datetime = Calendar.current.date(from: dateComponents)!
    print(Calendar.current.timeZone)
    print(datetime)

它产生此输出:

欧洲/布拉格(当前)

2017-12-26 11:45:00 0000

我期望

2017-12-26 12:45:00 0000

由于指定了时区。我必须做什么不同?谢谢。

2017-12-26 11:45:00 +0000正在向您显示GMT/UTC/Zulu中的日期(这就是+0000的含义)。底线,2017年12月26日下午12:45在布拉格 GMT。

11:45

Datedescription属性(如果您仅print A Date使用)总是返回GMT中显示的字符串。如果您想在本地时区中看到它,则使用日期格式器将日期转换为字符串,例如

let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
print(formatter.string(from: datetime))

底线,如果要在应用程序的用户界面中显示日期(在其本地时区显示),请始终使用日期格式。像DateComponents一样,DateFormatter的时区默认为当前时区。

注意,我避免使用 DateFormatterdateFormat属性,因为每当在应用程序UI中显示日期字符串时,您都需要使用本地化字符串(如"最终用户"首选的格式所示的日期,如settings app中指定)。实现此目的的最简单方法是使用dateStyletimeStyle

相关内容

  • 没有找到相关文章

最新更新