Java utc时间(以微秒和15微秒为单位)块
有没有一种方法可以在午夜后以微秒和15微秒为单位提取java utc时间Java utc时间(以微秒和15微秒为单位)块,java,date,time,utc,simpledateformat,Java,Date,Time,Utc,Simpledateformat,有没有一种方法可以在午夜后以微秒和15微秒为单位提取java utc时间 这意味着从1微秒到15微秒的时间将由相同的时间表示。唯一的问题是时间分辨率。通常,Java通过Java.util.Date或支持毫秒精度。如果您需要更高的精度,可以使用此方法 但这带来了另一个问题-nanoTime()与任何日历都无关,它只是一个不断增长的计数器,精度为纳秒。我能想到的唯一解决办法是: 在午夜确定System.nanoTime()值,调用它S。这可能有问题,但你不必等到午夜,一些简单的数学就足够了 计算以
这意味着从1微秒到15微秒的时间将由相同的时间表示。唯一的问题是时间分辨率。通常,Java通过
Java.util.Date
或支持毫秒精度。如果您需要更高的精度,可以使用此方法
但这带来了另一个问题-nanoTime()
与任何日历都无关,它只是一个不断增长的计数器,精度为纳秒。我能想到的唯一解决办法是:
- 在午夜确定
值,调用它System.nanoTime()
。这可能有问题,但你不必等到午夜,一些简单的数学就足够了S
- 计算以下各项:
(System.nanoTime() - S) / 15000
- 如果值为
,则我们处于相同的15微秒范围内0
system.nanoTime()
获得纳秒的系统时间。如果您的系统支持纳秒分辨率,那么编写一个函数来转换纳秒数并将其四舍五入到15微秒的数据块就相当容易了。tl;博士
Java 8和更高版本使此任务变得非常简单:将的替代实现作为可选参数传递给Java.time类
2018-04-04T21:55:46.537750Z← 请注意,微秒的最后一位数始终为零
java.time
跟踪日期时间的现代方法使用java.time类
这些类的可选参数为。当您在开发和测试期间需要更改或人工时钟时,这非常方便
您可以实现自己的时钟
。但是,Clock
类本身捆绑了几种替代实现。其中之一是按指定的时间递增时间
获取一个时钟,该时钟返回从指定的时钟截断到指定持续时间内最近的事件的实例
渔获量是分数秒的数量,它被平均分配,正如博士所说:
如果它的一部分小于一整毫秒,那么整个持续时间必须分为一秒而不留余数。所有正常滴答声持续时间都将符合这些标准,包括小时、分钟、秒和毫秒的任意倍数,以及合理的纳秒持续时间,如20ns、250000ns和500000ns
所以这里15微秒不起作用,但是10微秒起作用。如果你仔细想想,这个规则不也适用于这个问题吗?因为从零开始的15微秒的块不会产生偶数秒
Duration d = Duration.of( 10 , ChronoUnit.MICROS ) ; // Define a span of time by which we want to increment the reporting of the current moment.
Clock clock = Clock.tick( Clock.systemDefaultZone() , d ); // Define a clock that increments by this span of time.
for ( int i = 1 ; i < 100 ; i++ ) {
System.out.println( Instant.now( clock ) ); // Override default `Clock` implementation with our special “chunky” incrementing clock.
// Sleep a moment.
try {
Thread.sleep( 3 ); // Sleep arbitrary amount of time.
} catch ( InterruptedException e ) {
e.printStackTrace();
}
}
Duration d=Duration.of(10,ChronoUnit.MICROS);//定义我们希望增加当前时刻报告的时间跨度。
Clock Clock=Clock.tick(Clock.systemDefaultZone(),d);//定义按此时间跨度递增的时钟。
对于(int i=1;i<100;i++){
System.out.println(Instant.now(clock));//使用特殊的“chunky”递增时钟覆盖默认的“clock”实现。
//睡一会儿。
试一试{
Thread.sleep(3);//睡眠任意时间。
}捕捉(中断异常e){
e、 printStackTrace();
}
}
请注意,输出行在微秒的“一”列中都是零,因为我们要求只报告时间增量10微秒,即0.000010秒
2018-04-04T21:55:46.537750Z
2018-04-04T21:55:46.550280Z
2018-04-04T21:55:46.553570Z
2018-04-04T21:55:46.556980Z
2018-04-04T21:55:46.560850Z
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
Instant.now( // Capture the current moment.
Clock.tick( // Access an alternate implementation of `Clock`.
Clock.systemDefaultZone() , // Start with the regular default implementation.
Duration.of( 10 , ChronoUnit.MICROS ) // Override to increment the “ticking” of the clock by this amount of time. Here we specify 10 microseconds, as 15 microseconds does not divide evenly into a whole second.
)
) // Returns an `Instant` object, the class replacing `java.util.Date`.
从哪里获得java.time类
- ,及以后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(
Duration d = Duration.of( 10 , ChronoUnit.MICROS ) ; // Define a span of time by which we want to increment the reporting of the current moment. Clock clock = Clock.tick( Clock.systemDefaultZone() , d ); // Define a clock that increments by this span of time. for ( int i = 1 ; i < 100 ; i++ ) { System.out.println( Instant.now( clock ) ); // Override default `Clock` implementation with our special “chunky” incrementing clock. // Sleep a moment. try { Thread.sleep( 3 ); // Sleep arbitrary amount of time. } catch ( InterruptedException e ) { e.printStackTrace(); } }