您需要时区方面的帮助,我需要在不更改时间戳的情况下进行更改,如下所示: “ 2019-01-25T11:55:00 + 00:00”->“ 2019-01-25T11:55:00-08:00”
这就是我得到的: “ 2019-01-25T11:55:00 + 00:00”时间戳00:00不正确,我需要将其更改为我正在获取的特定时区,例如-08:00以获取“ 2019-01-25T11: 55:00-08:00“
我正在使用带有以下日期格式的dateFormatter:“ yyyy-MM-dd'T'HH:mm:ssZ” 尝试通过dateComponents将整个时间戳解耦,然后再重新构建,添加了tz,但时间也改变了(
谢谢。
答案 0 :(得分:1)
鉴于您需要忽略时间戳字符串中提供的时区,并将其替换为时区标识符,可以使用如下代码:
let timezone = "America/Los_Angeles"
let timestamp = "2019-01-25T11:55:00+00:00"
let df = DateFormatter()
df.timeZone = TimeZone(identifier: timezone)
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date = df.date(from: String(timestamp.dropLast(6)))
这将使用其他时区设置日期格式,同时解析没有任何时区的时间戳(使用dropLast(6)
删除)。
此代码为您提供了一个Date
,代表洛杉矶时区的2019年1月25日11:55:00。请记住,如果仅打印date
,它将以UTC格式显示日期。这只是打印Date
的输出。
请注意,实际的正确解决方案是首先从API获取具有正确时区的时间戳字符串。您不必为了获得正确的时间戳而像这样跳过篮球。
答案 1 :(得分:0)
所以我在这里结束了
日期:
extension Date {
public func dateWithAdjusted(timeZone: String, date: String) -> String {
let timeZoneIdentifier = TimeZone(identifier: timeZone)?.identifier
guard let timezoneId = timeZoneIdentifier else { return "" }
let timeZoneOffset = TimeZone.getOffset(from: timezoneId)
let regex = try! NSRegularExpression(pattern: "([+-])([0-9]{2}[:]{1}[0-9]{2})", options: .caseInsensitive)
let range = NSMakeRange(0,date.count)
let newTimeStamp = regex.stringByReplacingMatches(in: date, options: [], range: range, withTemplate: timeZoneOffset)
return newTimeStamp
}
和时区:
extension TimeZone {
public static func getOffset(from identifier: String) -> String {
let timeZone = TimeZone(identifier: identifier)
guard let tz = timeZone else { return getOffset(from: TimeZone.current.identifier ) }
let seconds = tz.secondsFromGMT()
let hours = seconds/3600
let minutes = abs(seconds/60) % 60
let timeZoneOffset = String(format: "%+.2d:%.2d", hours, minutes)
return timeZoneOffset
}
let adjustedTimestamp = Date().dateWithAdjusted(timeZone:"America/New_York", date: "2019-01-26T02:55:00+00:00")
Output: "2019-01-26T02:55:00-05:00"