我有一个来自Json的时间部分。我正在尝试根据发布的时间来对对象进行分组。
我有一个像1540432146
这样的时间间隔,这是一个双倍。
我正在使用将其转换为日期类型
guard let timeInMilliseconds = lastUpdateOn as? Double else {return NSDate()}
let timeInSeconds = timeInMilliseconds / 100000
print(timeInSeconds)
// get the Date
let dateTime = NSDate(timeIntervalSince1970: timeInSeconds)
因此,我得到2018-10-25 10:54:20.325076+0900
作为输出。
是否可以删除其中的时间组件并再次将日期类型转换回TimeIntervalSincel1970,因为我稍后会使用它对数组中的元素进行排序,并且比较Double 会更容易
func getTime(lastUpdateOn:Any) -> NSDate{
guard let timeInMilliseconds = lastUpdateOn as? Double else {return NSDate()}
let timeInSeconds = timeInMilliseconds / 100000
// get the Date
let dateTime = NSDate(timeIntervalSince1970: timeInSeconds)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
let datenew = dateFormatter.string(from: dateTime as Date)
let newDate = dateFormatter.date(from: datenew)
print(newDate)
return dateTime
}
这是我尝试过的函数,但它总是返回值(1970-06-27 15:00:00 +0000)
。我做错了什么?
如果您的唯一目标是比较不同的日期以查看哪个日期先到,只需使用以下方法将 Int Unix 时间戳从 JSON 转换为Date
对象:
let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)
您可以使用>
、=
、<
等直接比较Date
对象,结果会将日期比较到毫秒。
您也可以直接比较 Unix 时间戳值,结果将与比较已转换为Date
对象的时间戳相同。
如果您只想按月/日/年比较 Date 对象,则它更复杂。
可可Date
总是代表世界各地的一个瞬间。在内部,它表示为自 iOS"纪元日期"(UTC 时间 2001 年 1 月 1 日午夜(以来的秒数 Unix 使用不同的纪元日期,但使用 "timeIntervalSince1970" 及其变体可以让您使用 CocoaDate
对象和 Unix 纪元日期。
没有"没有时间成分"的日期这样的东西。您可以通过多种方式"规范化"日期:您可以将日期转换为仅包含月/日/年的日期字符串;您可以强制所有 Date 值在给定时区中其月/日/年的午夜,也可以从Date
中提取月/日/年DateComponents
。(在 Xcode 帮助系统中搜索"DateComponents",并在Calendar
类引用中搜索"DateComponents",因为许多允许您对Dates
和DateComponents
进行计算的函数都是由Calendar
类提供的。
请注意,Unix 数字时间戳所在的日/月/年通常因时区而异。现在是美国东部时间 10 月 24 日 22:47 在华盛顿郊区。我刚刚计算了当前时间的 Unix 时间戳并得到了1540435644000。在日本,1540435644000是10月25日。(从我的角度来看,它已经是日本的明天了(。 所以 2 个 Unix 时间戳在日本可能在同一天/月/年,但在我居住的不同日/月/年,反之亦然。