从 Swift 中的 TimeInterval 中删除时间组件?
Remove time component from TimeInterval in Swift?
我有一个来自 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
}
这是我尝试过的函数,但它 returns 的值总是 (1970-06-27 15:00:00 +0000)
。我做错了什么?
如果您的唯一目标是比较不同的日期以查看哪个日期先出现,只需将 Int Unix 时间戳从您的 JSON 转换为 Date
对象:
let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)
您可以直接使用 >
、=
、<
等来比较 Date
个对象,结果会将日期比较到毫秒。
您还可以直接比较您的 Unix 时间戳值,结果与比较您已转换为 Date
对象的时间戳相同。
如果只是通过month/day/year比较Date对象,那就更复杂了。
A Cocoa Date
ALWAYS 代表世界各地的瞬间。在内部,它表示为自 iOS "epoch date"(UTC 时间 2001 年 1 月 1 日午夜)以来的秒数 Unix 使用不同的纪元日期,但使用 "timeIntervalSince1970" 及其变体可以让您使用 Cocoa Date
对象和 Unix 纪元日期。
没有日期 "without a time component" 这样的东西。您可以通过多种方式 "normalize" 您的日期: 您可以将日期转换为只有 month/day/year 的日期 string;您可以强制所有日期值在给定时区的 month/day/year 正好是午夜,或者您可以从 Date
中提取 month/day/year DateComponents
。 (在 Xcode 帮助系统中搜索 "DateComponents",并在 Calendar
class 参考中搜索 "DateComponents",因为许多功能可以让您执行Dates
和 DateComponents
的计算由 Calendar
class 提供。)
请注意,Unix 数字时间戳所在的 day/month/year 通常因您所在的时区而异。现在是 10 月 24 日在华盛顿特区郊区的 22:47 EDT。我刚刚计算了当前时间的 Unix 时间戳,得到了 1540435644000。在日本,1540435644000 是 10 月 25 日。 (在我看来,在日本已经是明天了)。所以 2 个 Unix 时间戳在日本可能在同一个 day/month/year 上,但在我居住的地方可能在不同的 day/month/year 上,反之亦然。
我有一个来自 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
}
这是我尝试过的函数,但它 returns 的值总是 (1970-06-27 15:00:00 +0000)
。我做错了什么?
如果您的唯一目标是比较不同的日期以查看哪个日期先出现,只需将 Int Unix 时间戳从您的 JSON 转换为 Date
对象:
let aDate = Date(timeIntervalSince1970: Double(timestamp)/1000.0)
您可以直接使用 >
、=
、<
等来比较 Date
个对象,结果会将日期比较到毫秒。
您还可以直接比较您的 Unix 时间戳值,结果与比较您已转换为 Date
对象的时间戳相同。
如果只是通过month/day/year比较Date对象,那就更复杂了。
A Cocoa Date
ALWAYS 代表世界各地的瞬间。在内部,它表示为自 iOS "epoch date"(UTC 时间 2001 年 1 月 1 日午夜)以来的秒数 Unix 使用不同的纪元日期,但使用 "timeIntervalSince1970" 及其变体可以让您使用 Cocoa Date
对象和 Unix 纪元日期。
没有日期 "without a time component" 这样的东西。您可以通过多种方式 "normalize" 您的日期: 您可以将日期转换为只有 month/day/year 的日期 string;您可以强制所有日期值在给定时区的 month/day/year 正好是午夜,或者您可以从 Date
中提取 month/day/year DateComponents
。 (在 Xcode 帮助系统中搜索 "DateComponents",并在 Calendar
class 参考中搜索 "DateComponents",因为许多功能可以让您执行Dates
和 DateComponents
的计算由 Calendar
class 提供。)
请注意,Unix 数字时间戳所在的 day/month/year 通常因您所在的时区而异。现在是 10 月 24 日在华盛顿特区郊区的 22:47 EDT。我刚刚计算了当前时间的 Unix 时间戳,得到了 1540435644000。在日本,1540435644000 是 10 月 25 日。 (在我看来,在日本已经是明天了)。所以 2 个 Unix 时间戳在日本可能在同一个 day/month/year 上,但在我居住的地方可能在不同的 day/month/year 上,反之亦然。