时区与区域设置
正确处理时区和区域设置的差异。
时区与区域设置 是 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 反馈 — 无需本地设置。