UTC日期到swift中的本地日期
我想将UTC日期转换为本地日期,而不是本地字符串。我再次尝试将UTC日期转换为本地日期(字符串),然后尝试将本地日期(字符串)转换为本地日期。它只返回UTC日期。我甚至每次都试着给出时区。什么都不管用。如果有人知道,我错在哪里了UTC日期到swift中的本地日期,swift,Swift,我想将UTC日期转换为本地日期,而不是本地字符串。我再次尝试将UTC日期转换为本地日期(字符串),然后尝试将本地日期(字符串)转换为本地日期。它只返回UTC日期。我甚至每次都试着给出时区。什么都不管用。如果有人知道,我错在哪里了 let dateFormator = DateFormatter() dateFormator.dateFormat = inputDateStringFormat if fromUTC { dateFormator.timeZone = TimeZone(ab
let dateFormator = DateFormatter()
dateFormator.dateFormat = inputDateStringFormat
if fromUTC {
dateFormator.timeZone = TimeZone(abbreviation: "UTC")
} else {
dateFormator.timeZone = TimeZone.current
}
let resultDate = dateFormator.date(from: inputDateString)
dateFormator.dateFormat = reqDateStringFormat
if toUTC {
dateFormator.timeZone = TimeZone(abbreviation: "UTC")
} else {
dateFormator.timeZone = TimeZone.current
}
guard let dateToConvert = resultDate else { return nil }
let resultString = dateFormator.string(from: dateToConvert)
let finalDateFormater = DateFormatter()
finalDateFormater.dateFormat = reqDateStringFormat
if toUTC {
finalDateFormater.timeZone = TimeZone(abbreviation: "UTC")
} else {
finalDateFormater.timeZone = TimeZone.current
}
if let requiredDate = finalDateFormater.date(from: resultString) {
return requiredDate
} else {
return nil
}
FYC:
关于这个问题的三条评论已经解释过,
日期
没有时区。日期是一个表示绝对时间点的数字(使用牛顿宇宙作为一个很好的近似值)。如果我的日期(湿时区)是123.45
,那么你在印度的日期也是123.45
,即使谷歌告诉我你比我早5.5小时。对于你来说,问我的时区中的哪个日期等于123.45
是没有意义的,因为答案是123.45
您应该始终在代码内部使用Date
s。相信我,这会让你的生活更轻松。话虽如此,如果您想向用户显示日期或从用户处获取日期,您不想让它们在UTC工作,而是在它们所在的时区(或特定的时区)工作。因此,使用带有适当时区的日期格式化程序
如果API或文件格式需要带时区的特定格式,也可以使用日期格式化程序
如果API需要Unix日期,可以使用方法timeInterfalSince1970
获取Unix时间
如果您需要获取ISO日期,请使用它来指定时区
FSCalendar
我刚刚在Github上快速浏览了一下,它看起来需要NSDate
s,这与SwiftDate
s是一样的。只要您正确设置了时区,您只需向它提供日期就可以了。正如关于这个问题的三条评论已经解释过的那样,日期
没有时区。日期是一个表示绝对时间点的数字(使用牛顿宇宙作为一个很好的近似值)。如果我的日期(湿时区)是123.45
,那么你在印度的日期也是123.45
,即使谷歌告诉我你比我早5.5小时。对于你来说,问我的时区中的哪个日期等于123.45
是没有意义的,因为答案是123.45
您应该始终在代码内部使用Date
s。相信我,这会让你的生活更轻松。话虽如此,如果您想向用户显示日期或从用户处获取日期,您不想让它们在UTC工作,而是在它们所在的时区(或特定的时区)工作。因此,使用带有适当时区的日期格式化程序
如果API或文件格式需要带时区的特定格式,也可以使用日期格式化程序
如果API需要Unix日期,可以使用方法timeInterfalSince1970
获取Unix时间
如果您需要获取ISO日期,请使用它来指定时区
FSCalendar
我刚刚在Github上快速浏览了一下,它看起来需要NSDate
s,这与SwiftDate
s是一样的。只要您正确设置了时区,就可以为它提供日期
s。A日期
是一个绝对时间点,没有时区。没有“UTC日期”或“本地日期”之类的东西。字符串有格式,日期
没有格式请用您真正需要的信息更新问题。给定的输入是什么,预期的输出是什么?正如Martin R已经提到的,Date
是一个绝对时间点,它没有与之关联的时区。您只能具有相对时间点(特定时区中的日期)的字符串表示形式。告诉我们您真正想要实现什么,然后我们可以提供更多帮助,但从提供的信息来看,不清楚您为什么需要时间表示,以及日期字符串是否足够。回到步骤1:aDate
是绝对时间点,没有时区(打印日期总是使用UTC).我听腻了“日期没有时区…它是UTC”。UTC是一个时区。我想知道“今天”是什么。如果是东部时间1月1日晚上8点以后,我希望“今天”是1月1日。我不只是想展示今天是一月一日。我今天调用的API需要将日期定为1月1日。Date类的一个限制是,唯一的方法是转换为字符串,然后再转换回日期。Date
是一个绝对时间点,没有时区。没有“UTC日期”或“本地日期”之类的东西。字符串有格式,日期
没有格式请用您真正需要的信息更新问题。给定的输入是什么,预期的输出是什么?正如Martin R已经提到的,Date
是一个绝对时间点,它没有与之关联的时区。您只能具有相对时间点(特定时区中的日期)的字符串表示形式。告诉我们您真正想要实现什么,然后我们可以提供更多帮助,但从提供的信息来看,不清楚您为什么需要时间表示,以及日期字符串是否足够。回到步骤1:aDate
是绝对时间点,没有时区(打印日期总是使用UTC).我听腻了“日期没有时区…它是UTC”。UTC是一个时区。我想知道“今天”是什么。如果是