在 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。

您可能更喜欢使用 ZonedDateTimeOffsetDateTime 而不是 LocalDateTime,因为它们分别包含时区和与 UTC 的偏移量。丢弃这些信息通常被认为是不好的做法,即使您看不到它有任何直接用途。