格式化本地时间 java

Formatting local time in java

我正在创建我的 JavaFX 应用程序,每次创建新的列表单元格时我都需要使用时间标签。我需要将当前时间的字符串以 HH:MM 格式直接放入以 String 作为参数的 Label 构造函数中。

我发现并使用了 java.util.Date 的:

Label timeLabel = new Label(new SimpleDateFormat("HH:MM").format(new Date()));

但它显示了错误的时区,所以我打算使用 java.timeLocalTime class。

有没有办法在一行中实现相同的字符串结果? 感谢您的帮助:)

尝试这样的事情:

Label timeLabel = new Label(String.format("%tR", LocalTime.now()));

参见:http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html

LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm"))

(这将使用默认语言环境,有关更多信息,请参阅 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ofPattern-java.lang.String-)。

但更好的做法是将格式化程序放入 static final 字段。这样它只创建一次而不是每次执行该行时。对于这个应用程序来说,这几乎肯定无关紧要,但最好从一开始就养成良好的习惯。

在新应用程序中使用 Java 8 种类型 (java.time) 可能会更好。您可以先创建一个 DateTimeFormatter:

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

然后获取当前时间并格式化:

Label timeLabel = new Label(LocalTime.now().format(dtf));

您可以通过多种方式创建 LocalTime 实例。第一种方法是创建一个 LocalTime 实例来表示现在的确切时间。这是它的样子:

LocalTime localTime = LocalTime.now();

另一种创建 LocalTime 对象的方法是根据特定的小时、分钟、秒和纳秒数来创建它。这是它的样子:

LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);

还有其他版本的 of() 方法只需要小时和分钟,或者小时、分钟和秒作为参数。

您可以使用这些方法访问 LocalTime 对象的小时、分钟、秒和纳秒:

  • getHour()
  • getMinute()
  • getSecond()
  • getNano()

看看这个,它对我帮助很大- http://tutorials.jenkov.com/java-date-time/localtime.html

String expectedDepartureTime = "1500";
String expectedArrivalTime = "0100";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HHmm");
LocalTime edt = LocalTime.parse(expectedDepartureTime, dtf);
LocalTime eta = LocalTime.parse(expectedArrivalTime, dtf);
System.out.println(eta.isBefore(edt) ? "You have a red eye flight": "You don't have a red eye flight");