answer by YCF_L 是正确且中肯的。我写这个答案的原因是我经常看到类似的问题(为什么我的日期/时间没有以自定义方式打印)。
请注意,LocalDate、LocalTime、LocalDateTime 等都有自己的 toString()实现,无论您做什么,无论何时打印它们的对象,它们的 toString() 方法都会被调用,因此总是它们的默认表示将被打印。如果您希望以自定义方式打印这些对象,您有两种选择:
- 您可以从
LocalDate 的对象中获取它们的元素(例如,年、月和日)并通过以您的自定义方式排列来打印它们。
- 使用格式化程序类,例如(现代的
DateTimeFormatter 或传统的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.
现在,再次查看answer by 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