在Swift中从TimeInterval中删除时间组件?

时间:2018-10-25 02:03:36

标签: ios swift date swift3

我有一个来自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)。我在做什么错了?

1 个答案:

答案 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时间戳可能在同一天/月/年,但是在我居住的不同天/月/年,反之亦然。