【问题标题】:Passing Date time from Java as mentioned below?如下所述从Java传递日期时间?
【发布时间】:2025-11-22 22:05:02
【问题描述】:

"TransactionDateTime": "/Date(1457540067076-0500)/"

我有交易日期时间以 JSON 以上格式从 Java 传递。

上面提到的“transactiondatetime”的格式是什么。我怎么能像上面一样通过。如果有的话,请给我一个例子。谢谢helo

【问题讨论】:

  • 假设是 [milliseconds-Timezone-In-GMT]
  • 您想要可读格式的长数字吗?比如 2022 年 1 月 8 日晚上 8 点?
  • 你不清楚你想要什么,你想生成“1457540067076-0500”格式的日期时间吗?

标签: java json datetime


【解决方案1】:

看起来像很长的毫秒,时区紧随其后。自 epoch 以来的秒数,后面是 UTC 之后的 tz

** 编辑 **

    Date date = new Date(1457540067076l);

    System.out.println(date);

输出:2016 年 3 月 9 日星期三 21:44:27 IST

【讨论】:

    【解决方案2】:

    Java 遵循称为纪元时间的计时系统,它相对于 1970 年 1 月 1 日这一日期。 更多epoch转换详情请关注here

    您预期的 JSON 格式包含 HHMM 格式的时间和时区偏移量。

    为此,您需要以纪元格式获取交易时间。 另外,需要为您的客户获取时区。

    例如:

        Date transactionDateTime = new Date();
        long time = transactionDateTime.getTime();
        Calendar calendar = Calendar.getInstance();
        int timezone = ((calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)) / (60 * 1000));
        System.out.println(time + " - " + String.format("%02d",timezone/60)+""+String.format("%02d",timezone%60));
    

    您需要根据您的格式要求修改示例代码。还要注意时区的符号(+ 或 -)。

    【讨论】:

      【解决方案3】:

      阅读您的 API 文档

      您应该阅读有关向您发送此数据的任何 Web 服务的文档。

      第一部分似乎是自 1970 UTC 开始的纪元以来的毫秒数。第二部分-0500 似乎是 UTC 后五个小时的 UTC 偏移量。但这只是一个猜测。您只能通过阅读文档来确定零件并解决下面讨论的歧义才能确定。

      解析

      所以首先将连字符上的字符串拆分为两个子字符串,如discussed in this Question

      接下来,将计数解析为Instant。讨论in this Question

      Instant instant = Instant.ofEpochMilli( countOfMillisecondsFromEpochNumberPortionOfInput );
      

      调整

      你如何解释这种组合是模棱两可的。 UTC 中的毫秒数是否应该调整五个小时?还是计数已经调整为五个小时?

      另一个歧义:减号是表示 UTC 的“落后”还是“领先”?当前的做法通常是“落后”的,但一些较旧的做法意味着“领先”。我会假设“落后”。

      我将假设计数旨在以 UTC 为单位,然后通过应用ZoneOffset 将其调整为比 UTC 晚 5 小时。一天中的时间和可能的日期将发生变化,以表示同一时刻被视为不同的wall-clock time

      ZoneOffset offset = ZoneOffset.of( offsetStringPortionOfInput );
      OffsetDateTime odt = instant.atOffset( offset );  // time-of-day and perhaps date will change to represent the same simultaneous moment viewed as a different wall-clock time.
      

      关于java.time

      java.time 框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date.Calendarjava.text.SimpleDateFormat

      Joda-Time 项目现在位于maintenance mode,建议迁移到 java.time。

      要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。

      大部分 java.time 功能在ThreeTen-Backport 中向后移植到Java 6 和7,并进一步适应ThreeTenABP 中的Android

      ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。

      【讨论】: