格式化本地时间 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.time
和 LocalTime
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");
我正在创建我的 JavaFX 应用程序,每次创建新的列表单元格时我都需要使用时间标签。我需要将当前时间的字符串以 HH:MM
格式直接放入以 String
作为参数的 Label 构造函数中。
我发现并使用了 java.util.Date
的:
Label timeLabel = new Label(new SimpleDateFormat("HH:MM").format(new Date()));
但它显示了错误的时区,所以我打算使用 java.time
和 LocalTime
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");