【问题标题】:Convert Epoch value into 12 hours format timestamp将 Epoch 值转换为 12 小时格式时间戳
【发布时间】:2017-02-13 16:27:49
【问题描述】:

我正在尝试将 Epoch 时间转换为 Scala 中的时间戳。

纪元值:1475596740

时间戳:1475596740*1000 => 1475596740000

结果时间戳总是以 24HRs 格式给出结果。但我想在 java/Scala 中将其转换为 12 小时格式。我使用了以下代码

   val outputformat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa");
    val formatteddTS = outputformat.format(ts)
    println(outputformat.parse(formatteddTS).getTime)

我需要将此结果与另一个 12 小时格式的时间戳值进行比较。如果我进行比较,结果是有线的。

时间 1(纪元)

2016-10-04 21:29:00.0

1475596740000(以毫秒为单位)

时间 2(12 小时格式的时间戳)

2016-10-04 09:29:28.0

1475553568000(以毫秒为单位)

结果

time2-time1 => -43172

从逻辑上讲,2016-10-04 21:29:00.0 和 2016-10-04 09:29:28.0 之间的时间差约为 28 秒(28000),但我得到的结果是 43172

【问题讨论】:

  • 您应该在 12 小时格式的末尾看到 AMPM
  • 是的,这正在发生。但如果我将其转换为毫秒,则值保持不变。
  • 所以你是说不希望它们相同。
  • @mhasan 从逻辑上讲,2016-10-04 21:29:00.0 和 2016-10-04 09:29:28.0 之间的时间差约为 28 秒(28000),但我得到的结果是43172
  • 我只是把它留在这里给任何正在看它的人。差不是28秒,是11.99小时左右。

标签: java scala epoch


【解决方案1】:

我认为您的计算有问题,因为我可以根据您提供的数据看到正确的结果

    Calendar cal1 = Calendar.getInstance();
    Calendar cal2 = Calendar.getInstance();
    long time1 = 1475596740000l;
    long time2 = 1475553568000l;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa");
    cal1.setTimeInMillis(time1);
    System.out.println(dateFormat.format(cal1.getTime()));
    cal2.setTimeInMillis(time2);
    System.out.println(dateFormat.format(cal2.getTime()));
    System.out.println(time1 - time2);

还有输出:

2016-10-04 10:59:00 PM
2016-10-04 10:59:28 AM
43172000

43172000 应该是 12 小时左右

编辑

好的,我使用了您建议的另一种方式,结果再次相同 - 43172000:

    String date1 = "2016-10-04 21:29:00";
    String date2 = "2016-10-04 09:29:28 AM";
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
    SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa", Locale.ENGLISH);
    Date dateObj1 = null;
    Date dateObj2 = null;
    try {
        dateObj1 = format1.parse(date1);
        dateObj2 = format2.parse(date2);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(dateObj1.getTime() - dateObj2.getTime());

对于“2016-10-04 09:29:28 PM”,它返回 -28000。我认为问题出在日期转换中

【讨论】:

  • 2016-10-04 21:29:00.0 ,2016-10-04 09:29:28.0 将此字符串转换为日期并从中获取 getTime() 并进行差异化。那你就明白我的意思了。
  • 从逻辑上讲,2016-10-04 21:29:00.0 和 2016-10-04 09:29:28.0 之间的时间差约为 28 秒(28000),但我得到的结果是 43172
猜你喜欢
  • 2015-08-19
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 2016-02-21
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多