日期字符串到 NSDate swift
Date string to NSDate swift
我有一个用日期字符串填充的数组,我想检查它并检查日期是今天还是昨天。日期字符串可能如下所示:
2015-04-10 22:07:00
到目前为止,我只是尝试使用 dateFormatter 对其进行转换,但它一直返回 nil
var dateString = arrayNews[0][0].date as NSString
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
var date = dateFormatter.dateFromString(dateString as String)
println(date)
我希望 sudo 代码看起来像这样
if dateString == currentDate
date = "Today, hh:mm"
else if dateString == currentDate(-1)
date = "Yesterday, hh:mm
else
date = dd. MM, hh:mm
在 else 语句中,日期可以是 1.April,12:00
如何实现这样的逻辑?
没有逻辑
func getDate(dateStr:String, format:String = "yyyy-MM-dd HH:mm:ss") -> NSString {
var dateFmt = NSDateFormatter()
dateFmt.timeZone = NSTimeZone.defaultTimeZone()
dateFmt.dateFormat = format
let newsDate = dateFmt.dateFromString(dateStr)!
let date = NSDate();
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone()
let localDate = dateFormatter.stringFromDate(date)
return ""
}
您必须使用 yyyy-MM-dd HH:mm:ss
而不是 yyyy-MM-dd hh:mm:ss
- HH: 24 小时格式
- hh: 12h 格式(AM/PM)
注意dateFormatter,默认使用本地时区。
println()
显示 GMT 时间的值,由 NSDate 保存。
这意味着,在不指定时区的情况下,当您将字符串 2015-04-10 22:07:00
转换为 NSDatetime 时,它 return 一个数据,即您当地时区的时间是 2015- 04-1022:07:00。由于 NSDate
保存格林威治标准时间的日期时间,因此当您将 NSDate
的值显示为 println()
时,您会看到不同的值。
如果你的时区是 GMT+2(比 GMT 早 2 小时),当你所在的地方 22h:07 时,GMT 时间是 20h:07。当您在 NSDate
上调用 println()
时,您会看到 2015-04-10 20:07:00
比较 2 个 NSDate:
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)
let compareResult = calendar?.compareDate(date, toDate: date2, toUnitGranularity: NSCalendarUnit.CalendarUnitDay)
if (compareResult == NSComparisonResult.OrderedSame) {
println("yes")
} else {
println("no")
}
//获取昨天,使用NSCalendar:
let yesterday = calendar?.dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: -1, toDate: date, options: NSCalendarOptions.MatchStrictly)
我有一个用日期字符串填充的数组,我想检查它并检查日期是今天还是昨天。日期字符串可能如下所示:
2015-04-10 22:07:00
到目前为止,我只是尝试使用 dateFormatter 对其进行转换,但它一直返回 nil
var dateString = arrayNews[0][0].date as NSString
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
var date = dateFormatter.dateFromString(dateString as String)
println(date)
我希望 sudo 代码看起来像这样
if dateString == currentDate
date = "Today, hh:mm"
else if dateString == currentDate(-1)
date = "Yesterday, hh:mm
else
date = dd. MM, hh:mm
在 else 语句中,日期可以是 1.April,12:00
如何实现这样的逻辑?
没有逻辑
func getDate(dateStr:String, format:String = "yyyy-MM-dd HH:mm:ss") -> NSString {
var dateFmt = NSDateFormatter()
dateFmt.timeZone = NSTimeZone.defaultTimeZone()
dateFmt.dateFormat = format
let newsDate = dateFmt.dateFromString(dateStr)!
let date = NSDate();
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone()
let localDate = dateFormatter.stringFromDate(date)
return ""
}
您必须使用 yyyy-MM-dd HH:mm:ss
而不是 yyyy-MM-dd hh:mm:ss
- HH: 24 小时格式
- hh: 12h 格式(AM/PM)
注意dateFormatter,默认使用本地时区。
println()
显示 GMT 时间的值,由 NSDate 保存。
这意味着,在不指定时区的情况下,当您将字符串 2015-04-10 22:07:00
转换为 NSDatetime 时,它 return 一个数据,即您当地时区的时间是 2015- 04-1022:07:00。由于 NSDate
保存格林威治标准时间的日期时间,因此当您将 NSDate
的值显示为 println()
时,您会看到不同的值。
如果你的时区是 GMT+2(比 GMT 早 2 小时),当你所在的地方 22h:07 时,GMT 时间是 20h:07。当您在 NSDate
上调用 println()
时,您会看到 2015-04-10 20:07:00
比较 2 个 NSDate:
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)
let compareResult = calendar?.compareDate(date, toDate: date2, toUnitGranularity: NSCalendarUnit.CalendarUnitDay)
if (compareResult == NSComparisonResult.OrderedSame) {
println("yes")
} else {
println("no")
}
//获取昨天,使用NSCalendar:
let yesterday = calendar?.dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: -1, toDate: date, options: NSCalendarOptions.MatchStrictly)