1
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;}}

但是,它总是显示相同的时间。我做错了什么。

PS 不打算直接使用 gettime() 之类的命令。字符串应该保留在那里。

4

2 回答 2

0

通过使用 YEAR、MONTH... 等等,您可以访问从 GregorianCalendar 类继承的静态字段。但是,您必须使用这些变量访问日历的字段,如下所示:

     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;
}
于 2017-11-15T09:46:19.827 回答
0

你的标题是“申请GregorianCalendar”,这不是我在这个答案中所做的。虽然mustabelMo 的回答是正确的,但我想向您展示如何最好地解决您的任务,恕我直言,第一点是我建议您不要使用早已过时的GregorianCalendar课程。今天,我们在称为java.timeJSR-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在方法中创建一个新对象。

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

于 2017-11-15T11:08:52.123 回答