0Pricing
Swift Academy · 课时

时区与区域设置

正确处理时区和区域设置的差异。

时区与区域设置 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

时区和区域设置

同一个 Date 时间点在世界各地的显示方式可能不同。TimeZone 和区域设置决定了它的解释方式和显示方式。

TimeZone 基础

TimeZone 表示相对于 UTC 的偏移量以及夏令时规则。TimeZone.current 表示设备所在的时区。

import Foundation

let tz = TimeZone.current
print("Identifier present: \(!tz.identifier.isEmpty)")

创建特定时区

使用 TimeZone(identifier:) 构造一个命名时区,例如 "America/New_York" 或 "Europe/Istanbul"。

import Foundation

if let tokyo = TimeZone(identifier: "Asia/Tokyo") {
    print("Tokyo offset seconds: \(tokyo.secondsFromGMT())")
}

相对于 GMT 的偏移量

secondsFromGMT(for:) 会返回当前偏移量。由于夏令时的影响,该值可能在一年中发生变化。

import Foundation

let utc = TimeZone(identifier: "UTC")!
print("UTC offset is zero: \(utc.secondsFromGMT() == 0)")

时区会影响日历

设置日历的 timeZone,这样日期和小时的计算就会使用该地区的时区,而不是设备的默认时区。

import Foundation

var cal = Calendar.current
cal.timeZone = TimeZone(identifier: "UTC")!
let hour = cal.component(.hour, from: Date())
print("Hour in UTC between 0 and 23: \(0...23 ~= hour)")

格式化中的时区

Date.FormatStyle 可以携带特定的时区,因此无论设备设置如何,输出都会反映该地区。

import Foundation

let style = Date.FormatStyle(date: .omitted, time: .shortened)
    .timeZone(TimeZone(identifier: "UTC")!)
let s = Date().formatted(style)
print(!s.isEmpty)

区域设置基础

Locale 包含语言和地区惯例,例如月份名称、一周的第一天,以及数字和日期的排列顺序。

import Foundation

let locale = Locale.current
print("Has identifier: \(!locale.identifier.isEmpty)")

创建区域设置

使用 Locale(identifier:) 创建特定的区域设置,例如 "fr_FR" 或 "tr_TR"。

import Foundation

let french = Locale(identifier: "fr_FR")
print("French locale id: \(french.identifier)")

区域设置会改变输出

将区域设置应用于格式样式会改变月份名称和排列顺序。同一个日期在不同语言中会有不同的显示方式。

import Foundation

let now = Date()
let style = Date.FormatStyle(date: .long, time: .omitted)
    .locale(Locale(identifier: "en_US"))
print(!now.formatted(style).isEmpty)

区域设置与日历结合使用

区域设置还会影响日历中的一周起始日和周编号。请结合时区、区域设置和日历,以获得完全正确的结果。

import Foundation

var cal = Calendar(identifier: .gregorian)
cal.locale = Locale(identifier: "en_US")
print("First weekday: \(cal.firstWeekday)")

以 UTC 存储,以本地时间显示

最佳实践是:使用 UTC 存储和传输日期,然后仅在显示时转换为用户的时区和区域设置。

import Foundation

let instant = Date()
let utcStyle = Date.FormatStyle(date: .numeric, time: .standard)
    .timeZone(TimeZone(identifier: "UTC")!)
print("UTC display ready: \(!instant.formatted(utcStyle).isEmpty)")

快速检查

跨地区处理日期时,推荐采用什么方式?

回顾

TimeZone 设置 UTC 偏移量和 DST 规则,而区域设置控制语言和地区格式。两者都可以附加到日历和格式样式上。请使用 UTC 存储日期,并仅在显示时转换为本地时区和区域设置。至此,日期和日历课程就完成了。

常见问题解答

「时区与区域设置」课时是免费的吗?

是的 — 「时区与区域设置」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「时区与区域设置」这节课中我会学到什么?

正确处理时区和区域设置的差异。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「时区与区域设置」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Date 类型与时间间隔
  2. Calendar 与 DateComponents
  3. 格式化日期
  4. 时区与区域设置
← 返回 Swift Academy