如何在Swift中获取本地日期和时间?
let last_login = String(NSDate.date())
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 47
更新:Xcode 8.2.1•Swift 3.0.2
您还可以使用Date方法description(with locale: Locale?)获取用户的本地化时间描述:
Date的字符串表示形式,使用给定的语言环境,或者locale参数为nil,采用国际格式YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM表示以小时和分钟为单位的时区偏移量UTC(例如,"2001-03-24 10:45:32 +0600").
Date().description(with: .current) // "Monday, February 9, 2015 at 05:47:51 Brasilia Summer Time"
Run Code Online (Sandbox Code Playgroud)
上面的方法并不意味着在向用户显示日期和时间时使用.它仅用于调试目的.
向用户显示本地日期和时间(当前时区)时,您应该尊重用户区域设置和设备设置.您唯一可以控制的是日期和时间样式(短,中,长或完整).有关更多信息,您可以查看此帖子shortDateTime.
如果您的目的是为编码目的创建时间戳UTC(iso8601),您可以查看此帖子iso8601
laj*_*eme 16
如果您想获取Date 对象而不是字符串表示,您可以使用以下代码段:
extension Date {
func localDate() -> Date {
let nowUTC = Date()
let timeZoneOffset = Double(TimeZone.current.secondsFromGMT(for: nowUTC))
guard let localDate = Calendar.current.date(byAdding: .second, value: Int(timeZoneOffset), to: nowUTC) else {return Date()}
return localDate
}
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
let now = Date().localDate()
Run Code Online (Sandbox Code Playgroud)
狮子座的回答很棒。我只是想添加一种将其用作计算属性的方法。
var currentTime: String {
Date().description(with: .current)
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
print(currentTime)
Run Code Online (Sandbox Code Playgroud)
或者你可以封装它:
extension String {
static var currentTime: String {
Date().description(with: .current)
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在任何使用字符串的地方使用它:
var time: String = .currentTime
Run Code Online (Sandbox Code Playgroud)
通过设置格式使用NSDateFormatter
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "hh:mm"
println(dateFormatter.stringFromDate(NSDate()))
Run Code Online (Sandbox Code Playgroud)
或风格
dateFormatter.dateStyle = .NoStyle
dateFormatter.timeStyle = .MediumStyle
Run Code Online (Sandbox Code Playgroud)
我已经找到了答案.
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
let dateInFormat = dateFormatter.stringFromDate(NSDate())
Run Code Online (Sandbox Code Playgroud)
let expiryDate: Date = ...
let localizedDateString = DateFormatter.localizedString(from: expiryDate, dateStyle: .medium, timeStyle: .short)
Run Code Online (Sandbox Code Playgroud)
“2017 年 9 月 10 日,14:37”
找回最常见的字符串格式(在处理查询和数据库时):
斯威夫特 4、5
2019-01-09T01:07:04Z(格林威治标准时间/祖鲁时间的RFC3339)
let f = ISO8601DateFormatter()
f.formatOptions = [.withInternetDateTime]
let s = f.string(from: Date())
Run Code Online (Sandbox Code Playgroud)
2019-01-08T17:04:16-08:00(RFC3339 考虑本地时区)
let f = ISO8601DateFormatter()
f.formatOptions = [.withInternetDateTime]
f.timeZone = TimeZone.current
let s = f.string(from: Date())
Run Code Online (Sandbox Code Playgroud)
2019-01-09(格林威治标准时间/祖鲁时间的标准日期戳)
let f = ISO8601DateFormatter()
f.formatOptions = [.withFullDate, .withDashSeparatorInDate]
let s = f.string(from: Date())
Run Code Online (Sandbox Code Playgroud)
2019-01-08(本地时区的标准日期戳记)
let f = ISO8601DateFormatter()
f.formatOptions = [.withFullDate, .withDashSeparatorInDate]
f.timeZone = TimeZone.current
let s = f.string(from: Date())
Run Code Online (Sandbox Code Playgroud)
所有四个字符串都代表完全相同的时间点。请记住,按字母顺序对这些字符串进行排序也会按时间顺序对它们进行排序,这使得该数据数据库不可知(我一直致力于此)。
在 @lajosdeme 的基础上使用 swift 5 重构答案。我的位置在中国。
import Foundation
let date = Date() // It is not the local time, less than 8 hours
print(date) // 2022-08-05 08:04:20 +0000
extension Date {
static func localDate() -> Date {
let nowUTC = Date()
let timeZoneOffset = Double(TimeZone.current.secondsFromGMT(for: nowUTC))
guard let localDate = Calendar.current.date(byAdding: .second, value: Int(timeZoneOffset), to: nowUTC) else {
return nowUTC
}
return localDate
}
}
// It is the local time
print(Date.localDate()) // 2022-08-05 16:04:20 +0000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31720 次 |
| 最近记录: |