日期对象到日历[Java]

Sam*_*uel 67 java calendar date

我有一个类电影我有一个开始日期,持续时间和停止日期.开始和停止日期是日期对象(私有日期startDate ...)(这是一个分配,所以我不能改变它)现在我想通过将持续时间(以分钟为单位)添加到startDate来自动计算stopDate.

根据我的知识,使用Date的时间操作函数被弃用,因此不好的做法,但另一方面,我看不到将Date对象转换为日历对象的方法,以便操纵时间并将其重新转换为Date对象.有办法吗?如果有什么是最好的做法

Lar*_*ren 96

您可以做的是创建a的实例,GregorianCalendar然后将其设置Date为开始时间:

Date date;
Calendar myCal = new GregorianCalendar();
myCal.setTime(date);
Run Code Online (Sandbox Code Playgroud)

但是,另一种方法是根本不使用Date.您可以使用这样的方法:

private Calendar startTime;
private long duration;
private long startNanos;   //Nano-second precision, could be less precise
...
this.startTime = Calendar.getInstance();
this.duration = 0;
this.startNanos = System.nanoTime();

public void setEndTime() {
        this.duration = System.nanoTime() - this.startNanos;
}

public Calendar getStartTime() {
        return this.startTime;
}

public long getDuration() {
        return this.duration;
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您既可以访问开始时间,也可以获得从开始到结束的持续时间.当然,精度取决于你.


Boz*_*sov 27

Calendar tCalendar = Calendar.getInstance();
tCalendar.setTime(date);
Run Code Online (Sandbox Code Playgroud)

date是一个java.util.Date对象.您也可以使用Calendar.getInstance()来获取Calendar实例(效率更高).


Mic*_*rdt 6

Calendar.setTime()

查看API方法的签名和描述通常很有用,而不仅仅是它们的名称:) - 即使在Java标准API中,名称有时也会产生误导.


pol*_*nts 6

你不需要为此转换Calendar,你只需使用getTime()/ setTime()代替.

getTime():返回自此Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数.

setTime(long time):将此Date对象设置为表示1970年1月1日00:00:00 GMT之后的时间毫秒的时间点.)

一秒钟内有1000毫秒,一分钟内有60秒.做数学吧.

    Date now = new Date();
    Date oneMinuteInFuture = new Date(now.getTime() + 1000L * 60);
    System.out.println(now);
    System.out.println(oneMinuteInFuture);
Run Code Online (Sandbox Code Playgroud)

L在后缀1000意味着这是一个long文字; 这些计算通常int很容易溢出.