gpt4 book ai didi

ios - 如何快速将 timeIntervalSinceNow 转换为可读日期

转载 作者:行者123 更新时间:2023-11-28 11:15:32 26 4
gpt4 key购买 nike

您好,我正在尝试查找某个日期与当前本地时间之间的时间间隔。

var a = eventDate.timeIntervalSinceNow
println(a)
//1404567.32182503 - output

当我尝试这样做时,我得到了上面提到的输出。如何将其更改为可读日期?

我想计算剩余天数、小时数、分钟数。我不想要年,月,秒。

必须:我想要事件日期和本地时间之间的时间间隔。不是 UTC 时间。

完整代码如下:

//eventDate is 2015-09-01 19:39 
var date = NSDate();
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYY-MM-dd HH:mm:ss ZZZZ"
dateFormatter.timeZone = NSTimeZone()
var localDateString = dateFormatter.stringFromDate(date)
var localDate: NSDate = dateFormatter.dateFromString(localDateString)!

var components = NSCalendar.currentCalendar().components(.CalendarUnitSecond |
.CalendarUnitMinute | .CalendarUnitHour | .CalendarUnitDay |
.CalendarUnitMonth | .CalendarUnitYear, fromDate: localDate,
toDate: self.eventDate, options: nil)

println("\(components.day) days \(components.hour) hours \(components.minute) minutes")

16 days 5 hours 41 minutes //Origianl output
16 days 0 hours 11 minutes // Expected output

我认为由于 UTC 时间的变化而面临这个问题!

最佳答案

几个想法:

  1. 如果您想要时差的字符串表示形式(例如在 UI 中显示),请使用 NSDateComponentsFormatter。例如,在 Swift 3 中:

    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.day, .hour, .minute]
    formatter.unitsStyle = .full
    let string = formatter.string(from: date1, to: date2)

    或者,在 Swift 2 中:

    let formatter = NSDateComponentsFormatter()
    formatter.allowedUnits = [.Day, .Hour, .Minute]
    formatter.unitsStyle = .Full
    let string = formatter.stringFromDate(date1, toDate: date2)

    根据您的示例,将显示:

    16 days, 6 hours, 9 minutes

    有关配置格式化程序行为的各种属性的详细信息,请参阅 the documentation .

  2. 在您的问题中,您向我们展示了您的输出:

    16 days 5 hours 41 minutes // Original output
    16 days 0 hours 11 minutes // Expected output

    您似乎从这个输出中推断出比较两个日期时存在一些问题。您比较这两个日期的技术很好(尽管 NSDateComponentsFormatter 简化了该过程,并且也生成了一个本地化的字符串)。但是计算两个日期之间耗时的例程不是问题。

    问题是您的日期之一(很可能是您使用格式化程序转换的日期)是错误的。

  3. 在评论中,您不断问同一个问题的不同排列,“我如何比较我本地时区的日期?”,答案是“你不知道”。日期没有时区。日期字符串可以,但 NSDate 对象不可以。

    如果您执行 Date/NSDate 对象的print,它通常会以 GMT 显示它们(您通常会看到 +0000 在日期之后,证实了这一事实)。如果您想在本地时区查看它们,请使用 DateFormatter 并使用 string(from:)(或在 Swift 2 中,NSDateFormatter并使用 stringFromDate())。

    但使用此 stringFromDate 机制(其他纯粹用于诊断目的)在您本地的时区中查看这些日期没有什么意义。没有“我本地时区的两个 NSDate 对象之间的差异”这样的事情。 NSDate 对象指示世界各地的单个时间点,而 NSTimeZone 仅当您希望看到该时间点显示为本地的字符串表示时才需要时区。

归根结底,问题不在于计算两个 NSDate 对象之间耗时,而在于您如何创建这些 NSDate 对象本身。更有可能的是,来自 parse 的原始字符串(由于某种原因您似乎不愿意与我们分享)不在您认为的时区。

人们最常犯的错误是假设字符串是在他们本地的时区,但它总是在 GMT/UTC/Zulu 中,除非日期字符串明确指定其他时间(例如 +0530) . (在没有时区限定符的情况下使用本地时区的 Web 服务报告日期是一个可怕的设计,所以希望您不要那样做。)

关于ios - 如何快速将 timeIntervalSinceNow 转换为可读日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com