当前位置: 首页 > 知识库问答 >
问题:

如何正确地将LocalTime格式化为HH: MM?

尉迟默
2023-03-14

我试图在调用LocalTime时使用getter在HH:mm中获取它。目前的情况是:

private LocalTime time;

public LocalTime getTime() {
    return time;
}

我想让它返回HH: mm中的时间,因为现在它是HH: mm: SS. s。我想弄乱日期时间格式化程序,但我搞不清楚。这是我的:

private LocalTime time;

public LocalTime getTime() {
   DateTimeFormatter formatDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
   LocalTime localFormattedTime = LocalTime.parse(time, formatDateTime);
   return localFormattedTime;
}

共有3个答案

叶文博
2023-03-14

试试这样的:

String localTimeString = "23:59:59";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
try {
    TemporalAccessor ta = dtf.parse(localTimeString);
    LocalTime lt = LocalTime.from(ta);
    LOGGER.info("lt: {}", lt);
} catch (RuntimeException re) {
    LOGGER.error("Unable to parse local time string: [{}]", localTimeString, re);
}

有关DateTimeFormatter支持的模式的详细信息,请参阅DateTimeFormatter上的Java文档。

您还可以使用DateTimeFormatter将LocalTime格式化为字符串形式,如下所示:

String localTimeAsString = dtf.format(lt)
LOGGER.info("LocalTime as string: {}", localTimeAsString);
顾英发
2023-03-14
  1. LocalTime没有日期部分,只有时间部分
  2. 您不能为LocalDateLocalTime指定格式,它使用标准格式,您无法更改它
  3. 如果需要特定格式,则必须使用String,而不是LocalDateLocalTimeLocalDate Time

丌官和泰
2023-03-14

YCF的回答是正确且中肯的。我之所以写下这个答案,是因为我经常看到有人问我类似的问题(为什么我的日期/时间没有以自定义方式打印出来)。

请注意< code>LocalDate 、< code>LocalTime 、< code>LocalDateTime等。每个都有自己的< code>toString()实现,无论您做什么,只要您打印它们的对象,就会调用它们的< code>toString()方法,因此总是打印它们的默认表示。如果您希望以自定义方式打印这些对象,您有两种选择:

  1. 您可以从LocalDate的对象中获取它们的元素(例如年、月和日)并通过以自定义方式排列来打印它们。
  2. 使用格式化程序类,例如(现代DateTimeForware或遗留SimpleDateFormat)并以自定义方式获取表示日期/时间对象的字符串。

为了使代码可重用和干净,您更喜欢第二种方法。

以下示例说明了相同的情况:

class Name {
    private String firstName;
    private String lastName;

    public Name() {
        firstName = "";
        lastName = "";
    }

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    @Override
    public String toString() {
        return firstName + " " + lastName;
    }
}

class NameFormatter {
    // Returns a name (e.g. First Last) as F. Last
    public static String patternIntialsLast(Name name) {
        if (name.getFirstName().length() > 1) {
            return name.getFirstName().charAt(0) + ". " + name.getLastName();
        }
        return name.toString();
    }

    // Returns a name (e.g. First Last) as Last F.
    public static String patternLastInitials(Name name) {
        if (name.getFirstName().length() > 1) {
            return name.getLastName() + " " + name.getFirstName().charAt(0) + ".";
        }
        return name.toString();
    }

    // Returns a name (e.g. First Last) as Last First
    public static String patternLastIFirst(Name name) {
        return name.getLastName() + ", " + name.getFirstName();
    }
}

public class Main {
    public static void main(String[] args) {
        Name name = new Name("Foo", "Bar");
        System.out.println("Default format:");
        System.out.println(name);// It will always print what name.toString() returns

        // If you want to print name in different formats use NameFormatter e.g.
        System.out.println("\nIn custom formats:");
        String strName1 = NameFormatter.patternIntialsLast(name);
        System.out.println(strName1);

        String strName2 = NameFormatter.patternLastIFirst(name);
        System.out.println(strName2);

        String strName3 = NameFormatter.patternLastInitials(name);
        System.out.println(strName3);
    }
}

输出:

Default format:
Foo Bar

In custom formats:
F. Bar
Bar, Foo
Bar F.

现在,再YCF_L一遍答案,这一次,你知道你必须按如下方式实现你的方法:

public String getTime() {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
    return formatter.format(ldt);
}

一个快速演示:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class Main {
    // Now
    static LocalDateTime ldt = LocalDateTime.of(LocalDate.now(), LocalTime.now());

    public static void main(String[] args) {
        System.out.println(getTime());
    }

    public static String getTime() {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
        return formatter.format(ldt);
    }
}

输出:

22:23
 类似资料:
  • JSON MyJSONObject: myJSONObject(console.log(data))的字符串:

  • 这个程序的输出与预期的一样,它给出2014-12-01 17:30:15。 但是当我在iFormat中将hh替换为hh(与outputformat相同)时,它给出的输出为12Out格式2014-12-01 05:30:15 如果我将两者都转换为小写,也会发生同样的情况。为什么会出现这种类型的不一致?

  • 本文向大家介绍如何将Java LocalDateTime格式化为ISO_DATE_TIME格式,包括了如何将Java LocalDateTime格式化为ISO_DATE_TIME格式的使用技巧和注意事项,需要的朋友参考一下 首先,设置日期: 现在,将日期时间格式化为ISO_DATE_TIME格式: 示例 输出结果

  • 问题内容: 我有一些格式不一致的现有代码-有时两个空格用于缩进,有时四个空格,以此类推。代码本身是正确的,并且经过了严格的测试,但是格式却很糟糕。 在线上是否有一个地方,我可以简单地粘贴一段Python代码并自动为我缩进/设置格式?或者,是否可以执行类似的操作,并用格式化的版本覆盖每个文件? 问题答案: 编辑:如今,我建议使用autopep8,因为它不仅可以纠正缩进问题,而且(根据您的判断)可以使

  • 我正在创建一个Lua库来帮助处理发送和接收DNS请求,目前正在阅读这个(DNS协议RFC),但我不知道如何正确格式化请求。例如,我是否必须指定消息的长度?我该怎么做? 我了解,从我的Wireshark检查,我应该也包括选项之后。我还在响应中看到一个;这是否意味着我只需在添加值之前,将请求名称终止为零? 我特别谈论的部分是RFC的4.1.3。 一些注意事项:我使用个人服务器对此进行了测试,并在查询部