【问题标题】:Date in darwin standard library giving me the wrong date?达尔文标准库中的日期给了我错误的日期?
【发布时间】:2015-09-17 21:42:28
【问题描述】:

这段代码在快速访问 C 中的时间和日期函数时有什么问题?即使 difftime 函数在时差上是正确的,它给我的日期也差了 3 天。

 import Darwin
    var time1 = tm(tm_sec: 00, tm_min: 00, tm_hour: 00, tm_mday: 13, tm_mon: 06, tm_year: 1977, tm_wday: 0, tm_yday: 0, tm_isdst: 0, tm_gmtoff: 0, tm_zone: nil)
    var time1secs = timegm(&time1)
    var time2secs = timegm(&time1) + 1_000_000_000
    var time2 = gmtime(&time2secs).memory

    difftime(time2secs, time1secs) // 1,000,000,000
    print("\(time2.tm_year)-\(time2.tm_mon)-\(time2.tm_mday)") //2009-2-22

    // The correct answer is 2009-02-19

【问题讨论】:

    标签: ios swift datetime standard-library darwin


    【解决方案1】:

    struct tm 中,tm_year 字段是年数 自 1900 年以来,tm_mon 是 0 .. 11 范围内的月份:

    // struct tm for 1977/06/13:
    var time1 = tm()
    time1.tm_year = 1977 - 1900
    time1.tm_mon = 06 - 1
    time1.tm_mday = 13
    
    // Add 10^9 seconds:
    var time2secs = timegm(&time1) + 1_000_000_000
    var time2 = gmtime(&time2secs).memory
    
    // Extract year/month/day:
    let year = time2.tm_year + 1900
    let month = time2.tm_mon + 1
    let day = time2.tm_mday
    print("\(year)-\(month)-\(day)") // 2009-2-19
    

    【讨论】:

    • 谢谢。在这个要点中,我将这些作为 tm 的扩展。 gist.github.com/masters3d/b90a99aac6b923add0ee
    • @masters3d:好主意!我可能会将Int 用于公共属性,因为这在 Swift 中更常见,但这可能是个人喜好问题。
    • 感谢所有有关此 API 的帮助。我希望 swift 在开源时提供原生 Date 类型。
    猜你喜欢
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多