如何在Swift中获取本地日期和时间?
let last_login = String(NSDate.date())
答案 0 :(得分:43)
更新: Xcode 8.2.1•Swift 3.0.2
您还可以使用Date方法description(with locale: Locale?)
来获取用户的本地化时间描述:
Date的字符串表示形式,使用给定的语言环境或语言环境 参数为零,国际格式为YYYY-MM-DD HH:MM:SS ±HHMM,其中±HHMM表示以小时为单位的时区偏移量 UTC的分钟数(例如,“2001-03-24 10:45:32 +0600”)。
description(with locale: Locale?)
Date().description(with: .current) // "Monday, February 9, 2015 at 05:47:51 Brasilia Summer Time"
上面的方法并不意味着在向用户显示日期和时间时使用。它仅用于调试目的。
向用户显示本地日期和时间(当前时区)时,您应该尊重用户区域设置和设备设置。您唯一可以控制的是日期和时间样式(短,中,长或完整)。有关详细信息,请查看此帖子shortDateTime。
如果您打算为编码目的创建时间戳UTC(iso8601),可以查看此帖子iso8601
答案 1 :(得分:6)
通过设置格式
来使用NSDateFormatterlet dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "hh:mm"
println(dateFormatter.stringFromDate(NSDate()))
或样式
dateFormatter.dateStyle = .NoStyle
dateFormatter.timeStyle = .MediumStyle
答案 2 :(得分:6)
我已经找到了答案。
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
let dateInFormat = dateFormatter.stringFromDate(NSDate())
答案 3 :(得分:4)
let expiryDate: Date = ...
let localizedDateString = DateFormatter.localizedString(from: expiryDate, dateStyle: .medium, timeStyle: .short)
“2017年9月10日,14:37”
答案 4 :(得分:2)
Leo的答案非常好。我只想添加一种方法将其用作计算属性。
var currentTime: String {
get {
return Date().description(with: Locale.current)
}
}
像这样使用它:
print(currentTime)
答案 5 :(得分:2)
获取当前日期和时间
let currentDate = Date()
print(currentDate) //this will return current date and time
但是将日期类型转换为字符串
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm" //give the formate according to your need
let dateStr = dateFormatter.string(from: currentDate) //which will give the string of current date and time in required dateformate
答案 6 :(得分:2)
如果要获取 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
}
}
像这样使用它:
let now = Date().localDate()
答案 7 :(得分:1)
您必须使用NSDateFormatter
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMMM dd, yyyy HH:mm"
dateFormatter.locale = "en" // Change "en" to change the default locale if you want
let stringDate = dateFormatter.stringFromDate(date)
答案 8 :(得分:0)
要获取最常用的字符串格式(在处理查询和数据库时):
快捷键4
2019-01-09T01:07:04Z (GMT /祖鲁时间的RFC3339)
let f = ISO8601DateFormatter()
f.formatOptions = [.withInternetDateTime]
let s = f.string(from: Date())
2019-01-08T17:04:16-08:00 (RFC3339占本地时区)
let f = ISO8601DateFormatter()
f.formatOptions = [.withInternetDateTime]
f.timeZone = TimeZone.current
let s = f.string(from: Date())
2019-01-09 (格林尼治标准时间/祖鲁时间的标准日期戳)
let f = ISO8601DateFormatter()
f.formatOptions = [.withFullDate, .withDashSeparatorInDate]
let s = f.string(from: Date())
2019-01-08 (占本地时区的标准日期戳)
let f = ISO8601DateFormatter()
f.formatOptions = [.withFullDate, .withDashSeparatorInDate]
f.timeZone = TimeZone.current
let s = f.string(from: Date())
所有四个字符串代表完全相同的日期和时间。 RFC3339格式(和截短的日期戳)的一个主要优点是,它们可以通过标准的小于,大于运算符进行排序,从而无需在服务器日期对象和客户端日期对象之间进行转换。
答案 9 :(得分:0)
迅速5
如果要手动执行,
Date()将始终返回当前UTC时间
let today = Date()
如果您居住,让我们在马来西亚说。现在是UTC + 8(意味着快8个小时)
您可以使用日历
let localDateTime = Calendar.current.date(byAdding: .hour, value: 8, today)!
您可以使用的另一种方法是
let localDateTime = Date().addingTimeInterval(8 * 60 * 60) //because the param in seconds