【问题标题】:Conversion From PDT TimeZone to IST Timezone is Incorrect从 PDT 时区到 IST 时区的转换不正确
【发布时间】:2021-02-03 08:46:31
【问题描述】:

我已经在我的手机中将时间设置为 San Carlos California(PDT Timezone),然后我尝试添加 30 天,这很好,但是当我尝试将该 Date 对象转换为 IST Timezone 时,这是不正确的.

2020 年 11 月 19 日 06:46:25 上面的一个是在今天的日期加上 30 天,在圣卡洛斯(PDT 时区) 当我在 IST 中转换那个时间时,它是“2020 年 11 月 18 日晚上 11:46” 但应该是“2020 年 11 月 18 日 19:46”

时间变了..

我正在使用它来将时间转换为 IST

将日期转换为本地时区

func convertExpiryToIst(inputFormat: String, outputFormat: String) -> String{
    let formatter = DateFormatter()
    formatter.dateFormat = inputFormat
    formatter.timeZone = TimeZone.current
    var date = formatter.date(from: self)   
    date?.addTimeInterval(TimeInterval(value))
    formatter.dateFormat = outputFormat
    if date != nil {
        print(date)
        return formatter.string(from: date!)
    }
    return self
}

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    那里的问题是您正在为结果日期添加时间间隔。日期没有时区,它只是一个时间点。您需要做的就是将日期格式化程序时区更改为所需的时区并获取它的字符串表示形式。

    extension String {
        func convertExpiryTo(inputFormat: String, inputTimeZone: String, outputFormat: String,  outputTimeZone: String)-> String? {
            let formatter = DateFormatter()
            formatter.dateFormat = inputFormat
            formatter.timeZone = TimeZone(identifier: inputTimeZone)
            if let date = formatter.date(from: self) {
                // let offset = TimeZone(abbreviation: "IST")!.secondsFromGMT(for: date) -  TimeZone(abbreviation: "PDT")!.secondsFromGMT(for: date)
                // let hours = Double(offset) / 3600   // 13.5 hours
                // dont add the timezone offset
                // date?.addTimeInterval(TimeInterval(value))
                formatter.dateFormat = outputFormat
                // just set a different  timezone
                formatter.timeZone = TimeZone(identifier: outputTimeZone)
                return formatter.string(from: date)
            }
            return nil
        }
    }
    
    "11/19/2020 06:46:25".convertExpiry(inputFormat: "MM/dd/yyyy HH:mm:ss", inputTimeZone: "America/Los_Angeles", outputFormat: "MM/dd/yyyy 'at' h:mm a", outputTimeZone: "Asia/Kolkata")  // "11/19/2020 at 8:16 PM" = +13.5 hours
    

    【讨论】:

    • 2020 年 11 月 20 日晚上 10:22 2020 年 11 月 21 日上午 11:52 应该比这晚一小时。 2020 年 11 月 21 日上午 10:52
    • 我曾尝试转换它,但我从 PDT 到 IST 的时间转换使我的时间比实际时间提前一小时 2020 年 11 月 20 日晚上 10:22 2020 年 11 月 21 日晚上 11:52 AM 应该比那晚一小时。 2020 年 11 月 21 日上午 10:52 @Leo Dabus
    • 时区偏移量取决于日期。 TimeZone(abbreviation: "IST")!.secondsFromGMT(for: date)
    • 我正面临这个问题,因为在当前日期增加了 30 天,例如今天在印度的 2020 年 10 月 22 日,但是在增加 30 天之后......日期将切换到 11 月......在 PDT 中是指提前一小时......(因为从 11 月开始,宠物的时钟设置为提前一小时,这是问题所在)。
    • 没有问题。不要乱用时区。上面的代码就是你所需要的,
    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 2022-01-09
    • 1970-01-01
    • 2013-05-24
    • 2014-06-07
    • 1970-01-01
    • 2016-10-10
    • 2011-07-06
    相关资源
    最近更新 更多