【问题标题】:Remove time component from TimeInterval in Swift?从 Swift 的 TimeInterval 中删除时间组件?
【发布时间】:2019-03-29 12:51:22
【问题描述】:

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

【问题讨论】:

  • 一秒有 1000 毫秒,而不是 100000。
  • 您先生是对的,我没有意识到,愚蠢的错误。谢谢你指出。它现在似乎工作正常。
  • 你应该在 Swift 中使用Date,而不是NSDate,你可以很容易地比较Dates。当你想显示日期时,你应该只转换回字符串

标签: ios swift date swift3


【解决方案1】:

如果您的唯一目标是比较不同的日期以查看哪个日期在前,只需将 Int Unix Timestamps 从您的 JSON 转换为 Date 对象:

let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)

您可以直接使用>=< 等来比较Date 对象,结果将比较日期精确到毫秒。

您还可以直接比较您的 Unix 时间戳值,结果将与比较您已转换为 Date 对象的时间戳相同。

如果您只想按月/日/年比较 Date 对象,则比较复杂。

A Cocoa Date ALWAYS 代表全世界的瞬间。在内部,它表示为自 iOS“纪元日期”(UTC 时间为 2001 年 1 月 1 日午夜)以来的秒数 Unix 使用不同的纪元日期,但使用“timeIntervalSince1970”及其变体可让您使用 Cocoa Date 对象和 Unix 纪元日期。

没有“没有时间组件”的日期之类的东西。您可以通过多种方式“规范化”您的日期:您可以将日期转换为只有月/日/年的日期字符串;您可以强制所有日期值在给定时区的月/日/年精确到午夜,或者您可以从Date 中提取月/日/年DateComponents。 (在 Xcode 帮助系统中搜索“DateComponents”,并在 Calendar 类参考中搜索“DateComponents”,因为许多可让您对 DatesDateComponents 进行计算的函数由 @ 提供987654335@班级。)

请注意,Unix 数字时间戳所在的日/月/年通常因您所在的时区而异。现在是 10 月 24 日美国东部时间 22:47,DC 郊区。我刚刚计算了当前时间的 Unix 时间戳,得到了 1540435644000。在日本,1540435644000 是 10 月 25 日。 (从我的角度来看,日本已经是明天了)。因此,2 个 Unix 时间戳可能在日本的同一天/月/年,但在我居住的不同日/月/年,反之亦然。

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2019-12-24
    • 1970-01-01
    • 2013-08-29
    相关资源
    最近更新 更多