在Java中,如何在不创建新实例的情况下更新/刷新日期对象中的时间?下面的代码可以工作,但我不想为计时器创建两次新实例。有没有更好的方法来实现这一点?在我的实际代码中,我需要在一个循环中完成这项工作,而我不能每次都创建一个新实例。我只想创建一次对象,然后尽可能将其更新到当前时间。
public static void main(String[] args)
{
Date timer;
long startTime_ms, endTime_ms;
long timeDifference_ms;
timer = new Date();
startTime_ms = timer.getTime();
System.out.println("Start time [ms]: " + startTime_ms);
// 250ms delay
try
{
Thread.sleep(250); // It seems sleep commands always require a try in Java
}
catch (InterruptedException e)
{
System.out.println("Error while waiting!");
e.printStackTrace();
}
timer = new Date();
endTime_ms = timer.getTime();
timeDifference_ms = endTime_ms-startTime_ms;
System.out.println("End time [ms]: " + endTime_ms);
System.out.println("Time difference [m]: " + timeDifference_ms);
}
上面代码的输出是:
开始时间[ms]:1647614880579
结束时间[ms]:1647614880841
时差[m]:262
第一个想法是:来吧,只是做一个新对象。这不会是你代码中最大的垃圾来源。
不要使用java.util.日期或日历,因为1.8有一个java.time的api。所有这些类都是不可变的,没有用新数据更新它们。如果你不知何故被困在1.8之前的java上,还有Joda时间。
替代方法:您可以使用long来保存时间戳,而不是Date。Date是一个围绕长值的包装。您可以在不创建新对象的情况下随意更新它(只要您不做会导致自动装箱的事情)。
我不会用Date类来获取毫秒。就我个人而言,我喜欢使用:系统。currentTimeMillis()
这是一个简单的方法,不创建任何变量,并返回毫秒的长值使用代码的示例:
public static void Main(String[] args){
long startTime_ms, endTime_ms;
long timeDifference_ms;
startTime_ms = System.currentTimeMillis();
System.out.println("Start time [ms]: " + startTime_ms);
// 250ms delay
try
{
Thread.sleep(250); // It seems sleep commands always require a try in Java
}
catch (InterruptedException e)
{
System.out.println("Error while waiting!");
e.printStackTrace();
}
endTime_ms = System.currentTimeMillis();
timeDifference_ms = endTime_ms-startTime_ms;
System.out.println("End time [ms]: " + endTime_ms);
System.out.println("Time difference [m]: " + timeDifference_ms);
}
这在大多数情况下都很好,但也可能会出现一些小错误。另一种选择是使用
系统。nanoTime()
用于更精确的计算和不基于日期的计算
long start_nano, end_nano;
long time_difference_nano;
start_nano = System.nanoTime();
try{Thread.sleep(100);}
catch(Exception e){
System.out.println("Error!");
e.printStackTrace();
}
end_nano = System.nanoTime();
time_difference_nano = end_nano-start_nano;
System.out.println("End time [ms]: " + end_nano);
System.out.println("Time difference [m]: " + time_difference_nano);
问题内容: 我用Java 创建了一个对象。当我这样做时,它显示如下:。结果,我的Excel文件似乎减少了一天(27 feb变为26 feb,依此类推),我认为这一定是因为时间的缘故。如何将其设置为下午5:30? 问题答案: 另请参阅 乔达时间 日历文件
问题内容: 我在一个包含日期/时间的网格中有一个字段,我需要知道该日期和当前日期/时间之间的区别。这样做的最佳方法是什么? 日期存储为。 问题答案: 这将为您提供两个日期之间的时差,以毫秒为单位 在您的示例中, 您需要确保这是一个有效的对象。 这样的事情可能会为您工作 即变成,这是构造函数可以理解的格式。
问题内容: 如何分辨两个datetime物体之间的时间差(以分钟为单位)? 问题答案: 从第一次减去以后的时间将创建一个仅保留时差的对象。在上面的示例中,它是0分钟,8秒和562000微秒。
问题内容: 有没有一种简单的方法可以从pytz日期时间对象中删除时区? 例如,在此示例中进行重构: 问题答案: 要从日期时间对象中删除时区(tzinfo): 如果您使用的是诸如arrow的库,则可以通过简单地将arrow对象转换为datetime对象,然后执行与上述示例相同的操作来删除时区。 你为什么要这样做?一个例子是mysql不支持DATETIME类型的时区。因此,使用ORM之类的sqlalc
我有一个pandas数据框,其中有一列应该表示一个财政季度的结束。格式为“Q1-2009”类型。是否有一种快速的方法将这些字符串转换为时间戳“2009-03-31”? 我发现只有格式“YYYY-QQ”的转换,但没有相反的转换。
在我的购物车应用程序中,我将所有购买日期存储在时间戳中。 假设,我想在n天前获得购买日期的时间戳(n是可配置的)。我将如何使用java获得它? 例如:类似于purchasedatebory5 days = current timestamp _ in _ days-5;我正在使用获取当前时间戳 我怎么能从中减去n天。我是初学者。请对此提供帮助。