gpt4 book ai didi

Swift 获取本地日期实例

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:46 24 4
gpt4 key购买 nike

请帮助我获取本地日期和一天的开始时间,我的意思是午夜。为了获取本地日期,我使用下面的代码,但我认为这是不对的

var calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
calendar!.timeZone = NSTimeZone.localTimeZone()
let components = NSDateComponents()
components.second = NSTimeZone.localTimeZone().secondsFromGMT
let today = calendar!.dateByAddingComponents(components, toDate: NSDate(), options: nil)

但是我查不到当天的午夜,它一直返回时间21.00

var comps = calendar!.components(NSCalendarUnit.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit | .HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit, fromDate: today!)
comps.hour = 0
comps.minute = 0
comps.second = 0

let startToday = calendar!.dateFromComponents(comps)!

即使这个返回 21.00

calendar!.startOfDayForDate(today)

最佳答案

NSDate 没有附加时区。出于某些令人头疼的原因,Apple 决定在您打印 时始终以 GMT 显示日期。在这上面掉了足够多的头发之后,我决定写我自己的描述方法,看看我本地时区的日期:

extension NSDate {
public var localTimeString : String {
let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
formatter.timeZone = NSTimeZone.localTimeZone()

return formatter.stringFromDate(self)
}
}

let now = NSDate()
let flags : NSCalendarUnit = [.Day, .Month, .Year]
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let components = gregorian.components(flags, fromDate: now)
let today12AM = gregorian.dateFromComponents(components)!

print(today12AM)
print(today12AM.localTimeString)

编辑:

您可以手动构建时间点:

let x = gregorian.dateWithEra(1, year: 2015, month: 8, day: 15, hour: 0, minute: 0, second: 0, nanosecond: 0)!
print(x)
print(x.localTimeString)

print(x.timeIntervalSince1970) // seconds since midnight Jan 1, 1970
print(today12AM.timeIntervalSince1970)

xtoday12AM 没有什么不同。正如我所说,NSDate 没有内置时区。当您使用 print 时,它会将您的日期转换为 GMT。这就是为什么当用您自己的时区表示时,它看起来与同一时间点表面上不同。

关于Swift 获取本地日期实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32017976/

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