使用 Swift 将当前时间设置为 yyyy-MM-dd 00:00:00
Set current time to yyyy-MM-dd 00:00:00 using Swift
我想问一下NSDate
,如何set/format当前时间如“2015-08-1209:30:41+0000”到“2015-08-1200:00:00 +0000
我已经在使用了:
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .NoStyle
//result date will be : Aug 12, 2015
但起息日期在数据库中的存储方式与“2015-08-12 00:00:00 +0000”完全不同,而是存储为“2015-08-11 17:00:00 +0000 UTC”。 =14=]
从 NSDate 实例中删除时间部分的最简单方法是
let startOfDate = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
要根据当前时区获取日期,请使用
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let startOfDate = calendar.startOfDayForDate(NSDate())
println(startOfDate)
Swift 4
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let startOfDate = calendar.startOfDay(for: Date())
print(startOfDate)
如果您只关心用户设备上的时区,即您不打算将格式化的日期字符串保存到服务器等,那么,您可以使用以下代码:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
如果你想将该日期字符串也保存到服务器,那么,你应该将时区信息添加到格式化程序:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
更新
现在我明白你真正想做什么了,你有一个日期字符串而不是 NSDate 对象作为输入。
您可以使用以下代码实现所需的输出,关于保留输入的时区信息。
let dateString = "2015-08-12 09:30:41 +0000"
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let timeZone = NSTimeZone(forSecondsFromGMT: 0)
let inputDateFormatter = NSDateFormatter()
inputDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss Z"
inputDateFormatter.calendar = calendar
if let inputDate = inputDateFormatter.dateFromString(dateString) {
let outPutDateFormatter = NSDateFormatter()
outPutDateFormatter.calendar = calendar
outPutDateFormatter.timeZone = timeZone
outPutDateFormatter.dateFormat = "yyyy-MM-dd 00:00:00 Z"
print(outPutDateFormatter.stringFromDate(inputDate))
}
let dateString = "2015-08-12 09:30:41 +0000"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString.componentsSeparatedByString(" ").first ?? "") {
println(dateFromString) // "2015-08-12 00:00:00 +0000"
}
Swift 4
let dateString = "2019-05-04 09:30:41 +0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = Calendar(identifier: .gregorian)
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
if let dateFromString = dateFormatter.date(from: dateString.components(separatedBy: " ").first ?? "") {
print(dateFromString) // "2019-05-04 00:00:00 +0000"
}
我想问一下NSDate
,如何set/format当前时间如“2015-08-1209:30:41+0000”到“2015-08-1200:00:00 +0000
我已经在使用了:
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .NoStyle
//result date will be : Aug 12, 2015
但起息日期在数据库中的存储方式与“2015-08-12 00:00:00 +0000”完全不同,而是存储为“2015-08-11 17:00:00 +0000 UTC”。 =14=]
从 NSDate 实例中删除时间部分的最简单方法是
let startOfDate = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
要根据当前时区获取日期,请使用
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let startOfDate = calendar.startOfDayForDate(NSDate())
println(startOfDate)
Swift 4
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let startOfDate = calendar.startOfDay(for: Date())
print(startOfDate)
如果您只关心用户设备上的时区,即您不打算将格式化的日期字符串保存到服务器等,那么,您可以使用以下代码:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
如果你想将该日期字符串也保存到服务器,那么,你应该将时区信息添加到格式化程序:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
更新
现在我明白你真正想做什么了,你有一个日期字符串而不是 NSDate 对象作为输入。
您可以使用以下代码实现所需的输出,关于保留输入的时区信息。
let dateString = "2015-08-12 09:30:41 +0000"
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let timeZone = NSTimeZone(forSecondsFromGMT: 0)
let inputDateFormatter = NSDateFormatter()
inputDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss Z"
inputDateFormatter.calendar = calendar
if let inputDate = inputDateFormatter.dateFromString(dateString) {
let outPutDateFormatter = NSDateFormatter()
outPutDateFormatter.calendar = calendar
outPutDateFormatter.timeZone = timeZone
outPutDateFormatter.dateFormat = "yyyy-MM-dd 00:00:00 Z"
print(outPutDateFormatter.stringFromDate(inputDate))
}
let dateString = "2015-08-12 09:30:41 +0000"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString.componentsSeparatedByString(" ").first ?? "") {
println(dateFromString) // "2015-08-12 00:00:00 +0000"
}
Swift 4
let dateString = "2019-05-04 09:30:41 +0000"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = Calendar(identifier: .gregorian)
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
if let dateFromString = dateFormatter.date(from: dateString.components(separatedBy: " ").first ?? "") {
print(dateFromString) // "2019-05-04 00:00:00 +0000"
}