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

Swift datefomatter返回错误时间

令狐钧
2023-03-14

我在iOS应用程序中使用dateformatter,这是返回错误的时间。 我没办法解决这个问题。 有谁能纠正我一下,让我知道正确的时间吗?

let dateString = "2020-08-11T05:32:33.000Z"

func approach1(){
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
          
    guard let date = dateFormatter.date(from: dateString) else {fatalError()}
    
    printTime(date: date)
}

func approach2(){
    
    let dateFormatter = ISO8601DateFormatter()
    dateFormatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
    guard let date = dateFormatter.date(from: dateString) else { fatalError()}
      
    printTime(date: date)
}

func printTime(date: Date){
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "h:mm a"
    dateFormatter.amSymbol = "AM"
    dateFormatter.pmSymbol = "PM"
    let time  = dateFormatter.string(from: date)

    print("date: \(date)")
    print("Time: \(time)") // Here it's always wrong time with those approach.
}

当前结果:

共有3个答案

商璞
2023-03-14

默认情况下,dateFormatter使用本地时区。 若要正确显示,请将其时区设置为UTC:DateFormatter.TimeZone=时区(缩写:“UTC”)

岳劲
2023-03-14

当格式化为字符串时,您需要指定时区(默认情况下,它使用您当前的本地时区):

func printTime(date: Date) {
    let dateFormatter = DateFormatter()
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC") // <- add here
    dateFormatter.dateFormat = "h:mm a"
    dateFormatter.amSymbol = "AM"
    dateFormatter.pmSymbol = "PM"
    let time = dateFormatter.string(from: date)

    print("date: \(date)")
    print("Time: \(time)")
}
南门宇
2023-03-14

没什么不对劲的。 日期格式化程序返回正确的时间

日期字符串

“2020-08-11t05:32:33.000Z”

表示UTC(+0000)中的日期。

你的当地时区显然是UTC+0530。 DateFormatter默认情况下考虑本地时区。

要格式化time(也是UTC格式),必须显式设置日期格式化程序的时区

func printTime(date: Date) {
    
    let dateFormatter = DateFormatter()
    dateFormatter.timeZone = TimeZone(identifier: "UTC")
    dateFormatter.dateFormat = "h:mm a"
    dateFormatter.amSymbol = "AM"
    dateFormatter.pmSymbol = "PM"
    let time  = dateFormatter.string(from: date)

    print("date: \(date)")
    print("Time: \(time)")
}
 类似资料:
  • 基类控制器里有error方法,用于api的错误消息返回输出 /** * 操作错误跳转的快捷方法 * @access protected * @param mixed $msg 提示信息,若要指定错误码,可以传数组,格式为['code'=>您的错误码,'msg'=>'您的错误消息'] * @param mixed $data 返回的数据 * @par

  • 问题内容: 我正在尝试使用获取Swift中的当前日期。创建断点并停止应用程序时,我发现设备的系统时间相差3个小时。应用程序正在真实的iPhone上运行。如何解决这个问题? 我还确保在App Delegate中编写以下内容: 但这仍然行不通。 问题答案: 它不会返回错误的时间。它返回正确的时间。NSDate没有任何时区信息。现在,当我们调用NSDate()时,我的计算机和您的计算机将报告完全相同的时

  • 我在Spring中有REST API作为后端,Angular 2作为前端。

  • 我是JS的学生。我有一段代码返回了一个错误。 这是返回的语法错误。你们能解释一下我做错了什么吗?

  • 问题内容: 假设我有一个像 然后在主要我有代码 显然,无论json格式不同,上述代码都会产生nil错误。Go中的json.Unmarshal()什么时候返回错误? 问题答案: 如果源中的值与目标中的值不对应,则JSON解码器不会报告错误。例如,如果源包含“状态”字段,这不是错误,但目标没有。 在其他情况下,Unmarshal函数确实会返回错误: 语法错误 类型不匹配 游乐场的例子

  • 本文向大家介绍Node.js 发生错误时返回查询,包括了Node.js 发生错误时返回查询的使用技巧和注意事项,需要的朋友参考一下 示例 err发生错误时,可以将执行的查询附加到对象上:            

  • 我一直在使用Processing 3.0,我试图在Arduino输出某些值时打印一个简单的时间戳,但它不起作用。我尝试使用SimpleDataFormat,但它总是返回,而不是实际时间。以下是MVCE: 输出示例: 我怀疑问题出在,因为,如果我将这些值插入在线epoch转换器,我会得到正确的时间。上述代码中的问题是什么?

  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第