当前位置: 首页 > 面试题库 >

您如何以UTC而不是本地时区JSON Marshall pq.NullTime?

寇开畅
2023-03-14
问题内容

我在postgres表中有日期。日期与UTC时区一起存储。

来自python的示例。

roster = Roster.objects.get(id=266438)
roster.start_timestamp
Out[11]: datetime.datetime(2018, 9, 7, 15, 0, tzinfo=<UTC>)

当我从go lib / pq中编组这些日期时,将以某种方式应用本地时区。

func (nt *pq.NullTime) MarshalJSON() ([]byte, error) {
    if !nt.Valid {
        return []byte("\"\""), nil
    }
    val := fmt.Sprintf("\"%s\"", nt.Time.Format("01/02/2006 15:04:05"))
    fmt.Println("Marshalling FMPDateTime", nt, val)
    return []byte(val), nil
}

日志示例:

Marshalling DateTime &{2018-09-08 00:30:00 +0930 ACST true} "09/08/2018 00:30:00"

2018-09-08 00:30:00 +0930 ACST 2018-09-07 15:00:00 UTC。

您如何以UTC而不是本地时区JSON Marshall pq.NullTime?


问题答案:

图书馆通常time.Time使用本地时区构造值,但是时刻仍然是相同的,因此您不必为此担心。

如果要专门显示/输出UTC时区,则将时间“切换”到UTC时区。为此,您可以使用以下Time.UTC()方法:

val := fmt.Sprintf("\"%s\"", nt.Time.UTC().Format("01/02/2006 15:04:05"))

就这样。

还要注意,如果您NullTime的用户名无效,我宁愿输出JSON null而不是空字符串。



 类似资料:
  • 编辑:好的。不幸的是,我不得不承认我对Java时间的理解存在严重缺陷,使得这个问题毫无意义。我一直认为System.currentTimeMillis()返回了当地时间。为什么?因为当你用它创建一个Date时,它只包含那个,没有引用时区,但在传递给System.out.println()时仍然打印出当地时间。我从未想过是toString()将(UTC)时间转换为当地时区。:( 我想用Java创建一

  • 在php.ini我设置了。重新启动了Apache,中的输出显示了正确的时区(Europe/Amsterdam)。现在当我打印时,我得到的是UTC时间,比我们的本地时间晚2小时。但是当我打印时,我仍然得到UTC时间,而我期望的是本地时间。 的输出是: 如果您能帮我了解当地时间,我们将不胜感激。 更新: phpinfo()的输出为: 所以“date.timezone”是正确的,但与“默认时区”有什么区

  • 问题内容: 我对Java中的时区感到好奇。我想从设备获取UTC时间(以毫秒为单位)并发送到服务器。当服务器向用户显示时间时,服务器会将其转换为本地时区。我系统中的时区是澳大利亚/悉尼(UTC + 11:00),测试时区时,我得到的结果如下: 输出: 我以为我可以为c2安排13/01/2014 00:12:00,因为UTC时间比我的时间晚11个小时。日历不能按我期望的方式工作吗? 您的帮助将不胜感激

  • 我对Java的时区很好奇。我想从设备上获取以毫秒为单位的UTC时间并发送到服务器。服务器在向用户显示时间时会将其转换为本地时区。我系统中的时区是澳大利亚/悉尼(UTC 11:00),当我测试时区时,我得到了下面的结果: 输出: 我以为我可以有 13/01/2014 00:12:00 对于 c2,因为 UTC 时间比我的晚 11 小时。日历没有按照我预期的方式工作吗? 非常感谢你的帮助。 添加z以显

  • 问题内容: 我该如何修改对 与产生的东西 问题答案: 一个快速的解决方法是执行以下操作: 一种更合适的方法是使用编译器扩展并定义的自定义编译。实际上,它的文档中已经有一个示例,它使用了不同的方法(函数)。由于您仅需要Postgres使用(我假设您在SA邮件列表中以前的电子邮件中都在使用Postgres),因此,这是另一个(更简单的)快速修复方法:

  • 我有一个dateTime对象,我用它来反映项目的状态。以下是我的对象代码: 当前状态返回,无论时区如何: 10/19/2022 22:13 PM 我在美国中部时间。当我控制台.log 我得到 但是,当我将计算机的时间更改为美国东部时间时,我得到: 这是不正确的。我预计东部时间将显示晚上 11:13 或 23:13:00。我应该如何修改代码以反映实际的本地浏览器时间?