【问题标题】:I want to convert long int values into HH:MM format in Java我想在 Java 中将 long int 值转换为 HH:MM 格式
【发布时间】:2018-10-30 23:42:10
【问题描述】:
  • -1800000 - 04:00
  • -19800000 - 05 : 00

我已经突出显示了我从代码中获得的 int 值。给出了实际值。我想编写代码将这些长整数值转换为HH:MM 格式。

【问题讨论】:

  • 这些是 24 小时制的
  • 到目前为止你做了什么?
  • 这些长整数值如何编码时间?
  • 只有我知道这些整数的真实值
  • 这是一天中的时间(凌晨 4 点和凌晨 5 点)还是时间量(4 小时和 5 小时,如持续时间)? java.time,现代 Java 日期和时间 API,以不同方式处理这两种情况。如果是一天中的某个时间,在哪个时区?我怀疑这很重要。

标签: java datetime time type-conversion long-integer


【解决方案1】:

真正的问题是,您和我都不了解此处预期的转换。我无法为你解决这个问题。不过,我想分享一个想法,它可能会对您有所帮助。

    DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");

    long longValue = -1_800_000;
    String formattedTime = Instant.ofEpochMilli(longValue)
            .atZone(ZoneId.of("Asia/Kabul"))
            .format(timeFormatter);
    System.out.println(formattedTime);

这会打印预期的内容。

04:00

我假设 long 值表示自纪元以来的毫秒数,这将是非常普遍的。与亚洲/喀布尔和亚洲/德黑兰时区的当地时间一致,不知道是否有其他时区可能适合。

如果这个解释成立,我们将不得不假设另一个值存在错误。我找不到该值适合 05:00 的时区。此外,如果这些值属于不同的时区,除非它们告诉您它们是哪个时区,否则您将没有机会。

【讨论】:

    【解决方案2】:
    public static String getDate(long time) {
        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
        cal.setTimeInMillis(time);
        SimpleDateFormat month_date = new SimpleDateFormat("HH:MM");
        String date = month_date.format(cal.getTime()).toString();
        System.out.println(date);
        return date;
    }
    

    这给了我答案,但有一两分钟的变化

    【讨论】:

    • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API 和它的DateTimeFormatter 中做得更好。如果您坚持自己使用它,指定小写的mm 分钟会有所帮助。请注意,结果会因运行程序的 JVM 的时区设置而异。
    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多