1

我正在编写一个程序,该程序具有显示当前时间的标题。我想允许用户修改日期/时间设置。但是在用户修改之后,我无法让日历保持最新。它始终显示用户输入的值。例如:

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println(cal.getTime());

假设第一个输出是

Mon Feb 18 11:33:07 CET 2013

我想要的是在 2 秒后获得第二个输出

Mon Sep 18 11:33:09 CET 2013 // Month = Sep and Seconds = 09

我得到的是

Mon Sep 18 11:33:07 CET 2013 // Month = Sep, seconds don't change, still 07!!

如果我cal = Calendar.getInstance();在第二个输出之前添加,我会得到

Mon Feb 18 11:33:09 CET 2013 // Seconds = 09, month doesn't change, still Feb!!

我认为必须有一个我找不到的简单而明显的实现。

更新:我不能在我正在使用的嵌入式系统上使用 DateFormat。

4

4 回答 4

3

日历未更新,因为日历的时间将在创建对象时或您明确设置时间时设置。在您的情况下,它在此行之后设置。

Calendar cal = Calendar.getInstance();

如果你真的想这样做,你需要找到经过的时间并增加日历时间,如下所示,

long startTime = System.currentTimeMillis(); // Process start time

try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

// Calculating elapse time
long elapsedTime = System.currentTimeMillis() - startTime;
// Incrementing the calendar time based on elapsed time
cal.setTimeInMillis(cal.getTime().getTime() + elapsedTime);
于 2013-02-18T11:08:46.430 回答
2

Calendar并且Date只是快照。创建它们后,它们不会自行更新。

无论您选择哪一种,每次您想要更新显示时都必须创建一个新的。然后对新快照进行调整。

如果您希望 Java 在更改月份时为您更改计算机时间,请参阅这篇文章:如何在 Java 中设置系统时间?

于 2013-02-18T11:00:10.430 回答
1

您应该将月份存储为偏移量,而不是添加月份,然后尝试使用正确的秒数再次计算时间。每次您希望获得更新时间时,计算实际时间,然后添加偏移时间。

您可以将偏移时间计算为 along并将其添加到实时。然而,这是一个更简单的例子 -

Calendar start = Calendar.getInstance();
System.out.println(start);
//add offset
int monthsOffset = 3;
//get new time
start.add(Calendar.MONTH, monthsOffset);
System.out.println(start);
于 2013-02-18T10:49:08.587 回答
0

对于您的问题,您不需要使用Date()压延机。

原因: Calander 的工作方式与calandar 类似,您的实例指向一个不会改变的calander 的特定实例(如物理实例)。

但是由于 Date() 是动态的,如下所示

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       //get current date time with Date()
       Date date = new Date();
       System.out.println(dateFormat.format(date));

更新: 回应评论“因为问题特定于嵌入式系统”

请参考这个答案

于 2013-02-18T10:51:18.323 回答