java - 使用 java.time.Clock.offset 以任意开始时间递增时间
问题描述
我想要一个设置为任意时间的时钟,然后以一秒为增量滴答作响。
例如,以“14:55:20”开头。然后我的应用程序应该在一秒钟内输出“14:55:20”、“14:55:21”、“14:55:22”等等。
这似乎Clock.offset
就是为了做到这一点。引用文档:
获取一个时钟,该时钟从指定的时钟返回具有指定持续时间的瞬间
所以我尝试了以下方法:
LocalTime localTime = LocalTime.parse( "14:55:20" );
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ).with( localTime );
Duration duration = Duration.between( odt.toInstant() , Instant.now() );
Clock clock = Clock.offset( Clock.systemUTC() , duration );
System.out.println( "odt = " + odt );
System.out.println( "duration = " + duration );
for ( int i = 1 ; i < 10 ; i++ )
{
LocalTime lt = OffsetDateTime.now( clock ).truncatedTo( ChronoUnit.SECONDS ).toLocalTime();
System.out.println( "localTime = " + lt );
try
{
Thread.sleep( TimeUnit.SECONDS.toMillis( 1 ) );
}
catch ( InterruptedException e )
{
e.printStackTrace();
}
}
我最初的出发点odt
似乎是正确的。但后来我的呼吁OffsetDateTime.now( clock )
并没有产生预期的结果。
odt = 2019-10-31T14:55:20Z
持续时间 = PT-10H-29M-4.832902S
本地时间 = 17:57:10
本地时间 = 17:57:11
本地时间 = 17:57:12
➥ 我没有正确使用Clock.offset
?还是我在这里误解了一些概念?
解决方案
持续时间是错误的方式:
Duration duration = Duration.between( Instant.now(), odt.toInstant() ); // Flipped arguments
输出
odt = 2019-10-31T14:55:20Z
duration = PT8H1M41.0216146S
localTime = 14:55:20
localTime = 14:55:21
localTime = 14:55:22
localTime = 14:55:23
localTime = 14:55:24
localTime = 14:55:25
localTime = 14:55:26
localTime = 14:55:27
localTime = 14:55:28
推荐阅读
- filter - Mapbox 商店定位器不会加载自定义标记
- java - 如何使用串行接口在 Teensy4.1 和 RaspberryPi 4 之间交换数据
- javascript - 当从文档存储站点检索到的文档在另一个应用程序中打开时,Edge 中会留下空白窗口
- postman - 如何将 Postman 控制台分离到单独的窗口中?
- python - 更改 CreateView Django 的类
- regex - 正则表达式验证 10 位电话号码
- reactjs - 位标记因打字稿错误而失败
- python - 如何找到csv文件中列的平均值?
- flutter - 屏幕底部的发送消息文本字段
- javascript - 为什么我的查找奇数的 JavaScript 程序不起作用?