在 JAVA 中应用公历
applying Gregorian Calendar in JAVA
import java.util.GregorianCalendar ;
public class MyCalendar extends GregorianCalendar {
public static void main(String[] args) {
MyCalendar a = new MyCalendar();
System.out.println(a.getCurrenttime());
}
public String getCurrenttime(){
String time= YEAR+"-"+(MONTH+1)+"-"+DATE+"-"+HOUR+"-"+MINUTE+"-"+SECOND;
return time;}}
但是,它总是显示相同的时间。我做错了什么。
P.S。它不打算直接使用像 gettime() 这样的命令。字符串应该保留在那里。
通过使用 YEAR、MONTH... 等等,您可以在这里访问从 GregorianCalendar class 继承的静态字段。
但是,您必须像这样使用这些变量来访问日历的字段:
public String getCurrenttime(){
String time= this.get(YEAR)+"-"+(this.get(MONTH)+1)+"-"+
this.get(DATE)+"-"+this.get(HOUR_OF_DAY)+"-"+this.get(MINUTE)+"-"+this.get(SECOND);
return time;
}
你的标题说“应用GregorianCalendar
”,这不是我在这个答案中所做的。而 mustabelMo’s answer is correct, I wanted to show you how IMHO your task is best solved, and the first point is I recommend you don’t use the long outdated GregorianCalendar
class. Today we have so much better in the modern Java date and time API known as java.time
or JSR-310。根据您的需要,您可以使用 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
其他注意事项:
组合优于继承。与其继承任何用于获取日历数据的 class,不如将 class 的 object 封装在 class.
中。
使用格式化程序将您的 date-time 格式化为字符串,如果您想要不同的格式,它会更方便、更容易更改。例如,许多人更喜欢始终以两位数打印分钟和秒,并在必要时使用前导零。为此,只需使用两个格式模式字母而不是一个:
private static final DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("u-M-d-H-mm-ss");
现在输出如下
2017-11-15-12-03-01
在代码中,我使用 ZoneId.systemDefault()
来获取 JVM 的时区设置。这是脆弱的,它可能会在您背后更改,恕不另行通知。如果可以,更喜欢 region/city 格式的特定时区,例如:
private LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Hong_Kong"));
尽管名称 getCurrentTime()
给出了创建 MyCalendar
object 的时间,而不是调用方法的时间。如果您更喜欢后者,只需在方法中创建一个新的 LocalDateTime
object。
您可能更喜欢使用 ZonedDateTime
或 OffsetDateTime
而不是 LocalDateTime
,因为它们分别包含时区和与 UTC 的偏移量。丢弃这些信息通常被认为是不好的做法,即使您看不到它有任何直接用途。
import java.util.GregorianCalendar ;
public class MyCalendar extends GregorianCalendar {
public static void main(String[] args) {
MyCalendar a = new MyCalendar();
System.out.println(a.getCurrenttime());
}
public String getCurrenttime(){
String time= YEAR+"-"+(MONTH+1)+"-"+DATE+"-"+HOUR+"-"+MINUTE+"-"+SECOND;
return time;}}
但是,它总是显示相同的时间。我做错了什么。
P.S。它不打算直接使用像 gettime() 这样的命令。字符串应该保留在那里。
通过使用 YEAR、MONTH... 等等,您可以在这里访问从 GregorianCalendar class 继承的静态字段。 但是,您必须像这样使用这些变量来访问日历的字段:
public String getCurrenttime(){
String time= this.get(YEAR)+"-"+(this.get(MONTH)+1)+"-"+
this.get(DATE)+"-"+this.get(HOUR_OF_DAY)+"-"+this.get(MINUTE)+"-"+this.get(SECOND);
return time;
}
你的标题说“应用GregorianCalendar
”,这不是我在这个答案中所做的。而 mustabelMo’s answer is correct, I wanted to show you how IMHO your task is best solved, and the first point is I recommend you don’t use the long outdated GregorianCalendar
class. Today we have so much better in the modern Java date and time API known as java.time
or JSR-310。根据您的需要,您可以使用 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
其他注意事项:
组合优于继承。与其继承任何用于获取日历数据的 class,不如将 class 的 object 封装在 class.
中。使用格式化程序将您的 date-time 格式化为字符串,如果您想要不同的格式,它会更方便、更容易更改。例如,许多人更喜欢始终以两位数打印分钟和秒,并在必要时使用前导零。为此,只需使用两个格式模式字母而不是一个:
private static final DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("u-M-d-H-mm-ss");
现在输出如下
2017-11-15-12-03-01
在代码中,我使用 ZoneId.systemDefault()
来获取 JVM 的时区设置。这是脆弱的,它可能会在您背后更改,恕不另行通知。如果可以,更喜欢 region/city 格式的特定时区,例如:
private LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Hong_Kong"));
尽管名称 getCurrentTime()
给出了创建 MyCalendar
object 的时间,而不是调用方法的时间。如果您更喜欢后者,只需在方法中创建一个新的 LocalDateTime
object。
您可能更喜欢使用 ZonedDateTime
或 OffsetDateTime
而不是 LocalDateTime
,因为它们分别包含时区和与 UTC 的偏移量。丢弃这些信息通常被认为是不好的做法,即使您看不到它有任何直接用途。