Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java utc时间(以微秒和15微秒为单位)块_Java_Date_Time_Utc_Simpledateformat - Fatal编程技术网

Java utc时间(以微秒和15微秒为单位)块

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。这可能有问题,但你不必等到午夜,一些简单的数学就足够了 计算以

有没有一种方法可以在午夜后以微秒和15微秒为单位提取java utc时间


这意味着从1微秒到15微秒的时间将由相同的时间表示。

唯一的问题是时间分辨率。通常,Java通过
Java.util.Date
或支持毫秒精度。如果您需要更高的精度,可以使用此方法

但这带来了另一个问题-
nanoTime()
与任何日历都无关,它只是一个不断增长的计数器,精度为纳秒。我能想到的唯一解决办法是:

  • 在午夜确定
    System.nanoTime()
    值,调用它
    S
    。这可能有问题,但你不必等到午夜,一些简单的数学就足够了

  • 计算以下各项:

    (System.nanoTime() - S) / 15000
    
  • 如果值为
    0
    ,则我们处于相同的15微秒范围内

你确定JVM和你的程序真的可以利用这样小的计时吗?

你可能想看看这个问题,以获取以微秒为单位的时间信息。Java不支持微秒级的日期计时

Java支持以毫秒为单位的日期,在某些系统上,您可以通过
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();
          }
      }