Ios 达尔文标准图书馆的日期给了我错误的日期?

Ios 达尔文标准图书馆的日期给了我错误的日期?,ios,swift,datetime,standard-library,darwin,Ios,Swift,Datetime,Standard Library,Darwin,这段代码在swift访问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 tim

这段代码在swift访问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

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进行了扩展@大师3d:好主意!我可能会对公共属性使用
Int
,因为这在Swift中更为常见,但这可能是一个品味问题。感谢所有使用此API的帮助。我希望swift在开源的时候能有一个原生的日期类型。