从Java传递Date时间,如下所述



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

我有交易日期时间通过JSON上面的格式从Java。

上面提到的"transactiondatetime"的格式是什么?我怎么能像上面那样通过呢?请给我一个例子,如果有的话。谢谢你的帮助

看起来像长毫秒,后面跟着时区。从epoch开始的秒数,UTC

后面跟着tz

**编辑**

    Date date = new Date(1457540067076l);
    System.out.println(date);

输出:Wed Mar 09 21:44:27 IST 2016

Java遵循称为epoch time的计时系统,它相对于1970年1月1日的日期。更多关于epoch转换的细节在这里。

您期望的JSON格式由HHMM格式的时间和时区偏移量组成。

为此,您需要获取事务时间的epoch格式的时间。此外,还需要为您的客户端获取时区。

例如:

    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));

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

阅读你的API文档

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

第一部分显示是自1970 UTC开始的纪元以来的毫秒数。第二部分-0500 显示与UTC相差5小时。但这只是猜测。你只能通过阅读文档来确定这些部分,并解决下面讨论的歧义。

<标题>

因此,首先将连字符上的字符串拆分为两个子字符串,如本问题中所讨论的。

接下来,将计数解析为Instant

Instant instant = Instant.ofEpochMilli( countOfMillisecondsFromEpochNumberPortionOfInput );
<标题> 调整

如何解释这个组合是模棱两可的。UTC的毫秒数应该调整5个小时吗?还是已经调整到5小时了?

另一个歧义:负号是表示UTC的"后"还是"前"?目前的做法通常是"落后",但一些旧的做法意味着"领先"。我假设是"behind"

我将假设计数是在UTC中,然后通过应用ZoneOffset调整为比UTC晚5小时。时间和日期可能会改变,以表示作为不同时钟时间的同一时刻。

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。时间框架内置于Java 8及以后版本中。这些类取代了旧的麻烦的日期时间类,如java.util.Date, .Calendar, &java.text.SimpleDateFormat

Joda-Time项目,现在处于维护模式,建议迁移到java.time.

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。

大部分java。时间功能向后移植到Java 6;7在ThreeTen-Backport,并进一步适应Android在ThreeTenABP。

three - ten - extra项目扩展了java。有额外课程的时间。这个项目是将来可能添加到java.time的试验场。

相关内容

  • 没有找到相关文章

最新更新