如何在java中获得到未来时间的毫秒数?[已关闭]

jxct1oxe  于 2023-02-14  发布在  Java
关注(0)|答案(3)|浏览(165)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

21小时前关门了。
Improve this question
在java中,我怎样才能得到一个未来时间的毫秒数?
这个想法是为了能够等待10分钟,直到未来的时间。
目前代码:

LocalDateTime now = LocalDateTime.now();
//int year = now.getYear();
//int month = now.getMonthValue();
//int day = now.getDayOfMonth();
//int hour = now.getHour();
//int minute = now.getMinute();
//int second = now.getSecond();
//int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.

//String myfuturedateasstring = "2014/10/29 18:10:45";
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//Date myfuturedateasdate = sdf.parse(myDate);

int timeintervaldelay = 10;

Calendar myfuturedateasdate = Calendar. getInstance();
myfuturedateasdate.setTime(LocalDateTime);
     
myfuturedateasdate.set(Calendar.MILLISECOND, timeintervaldelay );
long futuredateinmilliseconds = myfuturedateasdate.getTime();

//var date1 = new Date("7/11/2010");
//var date2 = new Date("12/12/2010");
long millisecondstostartin = Math.abs(futuredateinmilliseconds - millis);
//var diffmilliseconds = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
System.out.println(millisecondstostartin);
3xiyfsfu

3xiyfsfu1#

为了测量时间差,我会避免使用LocalTimeLocalDateTime。有一个时态类Instant表示瞬时时间点,而不管地点。为了测量时态差,使用Duration进行基于时间的计算,使用Period进行基于日期的计算。

final Instant now = Instant.now();                       // timestamp
final Instant future = now.plus(10, ChronoUnit.MINUTES); // timestamp + 10 mins
final Duration duration = Duration.between(now, future); // difference (Duration)
long result = duration.toMillis();                       // difference (millis)

System.out.println(result);                              // 600000
yh2wf1be

yh2wf1be2#

TL;医生

等待10分钟

Thread.sleep( Duration.ofMinutes( 10 ) )

避免使用LocalDateTime

LocalDateTime.now();
我无法想象调用LocalDateTime.now是正确的事情的场景。
该类不能表示时间线上的某个时刻或某个点。它缺少时区或UTC偏移量的上下文。

语法不正确

我的未来日期。设置时间(本地日期时间);
(a)不要不必要地将Calendar等糟糕的遗留日期-时间类与它们的替代品(JSR 310中定义的现代 * java. time * 类)混合使用。
(b)不能将类的名称(如LocalDateTime)作为参数传递。这不是合法的Java语法。
(c)在这里发帖之前,试着清理要编译的代码(如果可行的话)。

Duration

等待10分钟直到将来的时间。
在Java 19+中,将Duration传递给Thread.sleep

Duration duration = Duration.ofMinutes( 10 ) ;
Thread.sleep( duration ) ;

在早期的Java中,将计数milliseconds传递给Thread.sleep

Duration duration = Duration.ofMinutes( 10 ) ;
Thread.sleep( duration.toMillis() ) ;
ijxebb2r

ijxebb2r3#

您试图在当前时间上加上10分钟,但您将该值加到了当前时间的毫秒数上,这是不正确的。

Duration duration = Duration.between(now, 
LocalDateTime.now().plusMinutes(10));
long millisecondstostartin = duration.toMillis();
System.out.println("Milliseconds to start: " + millisecondstostartin);

相关问题