你的标题是“申请GregorianCalendar
”,这不是我在这个答案中所做的。虽然mustabelMo 的回答是正确的,但我想向您展示如何最好地解决您的任务,恕我直言,第一点是我建议您不要使用早已过时的GregorianCalendar
课程。今天,我们在称为java.time
JSR-310的现代 Java 日期和时间 API中拥有了很多更好的功能。根据您的需要,您可以使用LocalDateTime
:
import java.time.ZoneId;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class MyCalendar {
public static void main(String[] args) {
MyCalendar a = new MyCalendar();
System.out.println(a.getCurrentTime());
}
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("u-M-d-H-m-s");
private LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault());
private String getCurrentTime() {
return now.format(formatter);
}
}
该程序打印出类似的东西
2017-11-15-11-59-1
其他注意事项:
更喜欢组合而不是继承。与其从用于获取日历数据的任何类继承,不如在类中封装该类的对象。
使用格式化程序将您的日期时间格式化为字符串,如果您想要不同的格式,更改会更方便和容易。例如,许多人更喜欢始终以两位数打印分钟和秒,必要时使用前导零。要获得这一点,只需使用两个格式模式字母而不是一个:
private static final DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("u-M-d-H-mm-ss");
现在输出就像
2017-11-15-12-03-01
在我用来ZoneId.systemDefault()
获取 JVM 时区设置的代码中。这很脆弱,可能会在您背后更改,恕不另行通知。如果可以,请选择区域/城市格式的特定时区,例如:
private LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Hong_Kong"));
尽管名称getCurrentTime()
为您提供了MyCalendar
创建对象的时间,而不是调用方法的时间。如果您更喜欢后者,只需LocalDateTime
在方法中创建一个新对象。
您可能更喜欢使用ZonedDateTime
orOffsetDateTime
代替,LocalDateTime
因为它们分别包括时区和与 UTC 的偏移量。即使您看不到它有任何直接用途,也通常认为丢弃这些信息是不好的做法。