我有一个来自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
作为输出。
是否可以删除其中的Time组件,然后再次将Date类型转换回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)
。我在做什么错了?
答案 0 :(得分:2)
如果您唯一的目标是比较不同的日期以看哪个先发生,只需使用以下方法将Int Unix时间戳从JSON转换为Date
对象:
let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)
您可以使用Date
,>
,=
等直接比较<
个对象,结果将比较日期至毫秒。
您还可以直接比较Unix时间戳值,其结果与比较转换为Date
对象的时间戳相同。
如果只想按月/日/年比较Date对象,则比较复杂。
可可Date
始终代表世界各地的即时时刻。在内部,它表示为自iOS“ epoch date”(UTC,2001年1月1日午夜)以来的秒数。Unix使用不同的epoch日期,但使用的是“ timeIntervalSince1970”,它的变体使您可以使用Cocoa {{1} }对象和Unix纪元日期。
没有“没有时间成分”的日期。您可以通过多种方式“标准化”日期:您可以将日期转换为仅包含月/日/年的日期 string ;您可以将所有Date值强制为给定时区中其月/日/年的恰好午夜,也可以从Date
中提取月/日/年DateComponents
。 (在Xcode帮助系统中搜索“ DateComponents”,并在Date
类引用中搜索“ DateComponents”,因为有许多函数可以在Calendar
和{{1}上进行计算}由Dates
类提供。)
请注意,Unix数字时间戳记所依据的日期/月份/年份通常根据您的时区而有所不同。现在是10月24日,美国东部时间22:47。我只是计算了当前时间的Unix时间戳,得出1540435644000。在日本,1540435644000是10月25日。 (从我的角度来看,现在已经是日本的明天了)。因此,在日本,两个Unix时间戳可能在同一天/月/年,但是在我居住的不同天/月/年,反之亦然。