当前位置: 首页 > 知识库问答 >
问题:

使用SWIFT将UTC日期转换为本地时间:添加小时而不是删除小时

呼延运恒
2023-03-14

我试图将UTC日期转换为当前时区,但我注意到一个时间问题。

我在大溪地/法属波利尼西亚(UTC-10),当前时间(使用格式:YYYY/MM/DD HH:MM:SS)是:2018/08/05 06:45:00

我的错在哪里?

雨燕3

import Foundation

    extension Date {

     var toLocalTimezone : Date {

      let formatter = DateFormatter()
      formatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"
      formatter.timeZone = TimeZone(secondsFromGMT:0) // UTC
      let defaultTimeZoneStr = formatter.string(from: self)

      let dateFormatter = DateFormatter()
      formatter.timeZone = TimeZone.current // Local
      dateFormatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"

      return dateFormatter.date(from:defaultTimeZoneStr)!

      }

    }

    debugPrint("\(TimeZone.current)")
    debugPrint("Locale time : \(Date().toLocalTimezone.toFormat(format: DateFormats.yyyyMMddHHmmss))" )

结果:

而不是:

“区域设置时间:2018-08-05 06:45:42”

共有1个答案

邹阳
2023-03-14

其实很简单。dateformattertimezone属性告诉dateformatterdate生成的字符串应该在哪个时区,或者您试图转换为date的字符串是哪个时区。

对你来说意味着什么?

  let formatter = DateFormatter()
  formatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"
  formatter.timeZone = TimeZone(secondsFromGMT:0) // UTC
  let defaultTimeZoneStr = formatter.string(from: self)

这意味着您正在将日期格式化为字符串并且得到的字符串将位于时区(SecondsFromgmt:0)

  let dateFormatter = DateFormatter()
  formatter.timeZone = TimeZone.current // Local
  dateFormatter.dateFormat = "yyyy/MM/dd' 'HH:mm:ss"

  return dateFormatter.date(from:defaultTimeZoneStr)!

我的理解是,您正在尝试创建一个函数,该函数将输出一个日期格式为字符串的自定义格式和用户时区。下面是我相信您正在寻找的片段:

extension Date {
  func format(_ format: String) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = format
    formatter.timeZone = TimeZone.current // Local
    return formatter.string(from: self)
  }
}
 类似资料:
  • Hi im使用moment js转换此字符串我尝试了: 当我存储在mongodb中时,问题就变成了 反正能解释为什么请?

  • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

  • 我想把这个2021年1月20日20:10:14转换成yyyy-MM-dd'T'HH:MM:ss格式。Android系统中的SSS'Z'。目前我正在使用函数,但当我转换为本地格式时,我没有得到原始时间

  • 问题内容: 我从来没有不得不将时间与UTC转换。最近有人要求我的应用注意时区,并且我一直在圈子里奔波。我发现很多有关将本地时间转换为UTC的信息,这很基本(也许我也做错了),但是我找不到任何有关将UTC时间轻松转换为最终用户时区的信息。 简而言之,android应用程序向我发送了(appengine应用程序)数据,该数据中包含时间戳。要将时间戳存储为UTC时间,我正在使用: 那似乎行得通。当我的应

  • 问题内容: 我使用以下方式将UTC日期存储到数据库中: 然后我要将保存的UTC日期转换为客户的本地时间。 我怎样才能做到这一点? 谢谢 问题答案: 并且都使用服务器除非被覆盖本地时区; 您可以覆盖与一起使用的时区。

  • 问题内容: 我从我的API获取此日期字符串: 但是此日期为UTC格式,我想将其转换为当地时间,该怎么办? 我尝试了这个: 但是它返回了这个错误: 问题答案: 您的日期格式模式错误。改成: 有关更多信息,请参见SimpleDateFormat的javadoc。