标签: java-time

用于时区偏移的java.time DateTimeFormatter模式

我正在尝试解析:2014-05-02-10.45.05.993280-5:00这-5:00是与UTC的偏移量.DateTimeFormatter在Java 8中使用java.time .

对于第一位,我有以下内容:yyyy-MM-dd-HH.mm.ss.SSSSSS但是,我无法弄清楚解析偏移量的模式应该是什么.

如果我有4位数(-05:00)的偏移量,我可以使用:yyyy-MM-dd-HH.mm.ss.SSSSSSxxx,但这不适用于3位数.

有任何想法吗?

java parsing date formatter java-time

15
推荐指数
3
解决办法
3万
查看次数

将LocalTime(Java 8)转换为Date

我正在尝试将java.time.LocalTime对象转换为java.util.Date但无法找到任何合适的方法.这样做的正确方法是什么?

有没有什么理由为什么java似乎没有内置的直接转换方法?

可能的重复:
如何转换joda时间 - 对我不起作用,可能我错过了一些"joda"库?
如何将Date转换为LocalTime? - 这反过来解决转换问题.

java date java-8 java-time

15
推荐指数
2
解决办法
1万
查看次数

获取Java 8中的当前时间

我正在探索Java 8的新java.time API.我特别想检索当前时间(我当前的时区,不同的时区和不同的偏移量).

代码是:

public static void getCurrentLocalTime(){
    LocalTime time = LocalTime.now();
    System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());
    System.out.println("Current local time : " + time);
}

public static void getCurrentTimeWithTimeZone(){
    LocalDateTime localtDateAndTime = LocalDateTime.now();
    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    ZonedDateTime dateAndTimeInLA  = ZonedDateTime.of(localtDateAndTime, zoneId);
    String currentTimewithTimeZone =dateAndTimeInLA.getHour()+":"+dateAndTimeInLA.getMinute();
    System.out.println("Current time in Los Angeles: " + currentTimewithTimeZone);
}

public static void getCurrentTimeWithZoneOffset(){
    LocalTime localtTime = LocalTime.now();
    ZoneOffset offset = ZoneOffset.of("-08:00");
    OffsetTime  offsetTime  = OffsetTime.of(localtTime, offset);
    String currentTimewithZoneOffset =offsetTime.getHour()+":"+offsetTime.getMinute();
    System.out.println("Current time  with offset -08:00: " + …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-time

15
推荐指数
3
解决办法
2万
查看次数

带有可选冒号分隔符的时区的Java DateTimeFormatter?

我正在尝试构建一个DateTimeFormatter,它可以接受冒号或偏移而不带冒号的偏移量.

有没有办法通过这个测试:

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[X]");
dateTimeFormatter.parse("2015-01-28T10:21:44+0100"); // OK
dateTimeFormatter.parse("2015-01-28T10:21:44+01:00"); // KO
Run Code Online (Sandbox Code Playgroud)

java datetime java-time

15
推荐指数
2
解决办法
1万
查看次数

如何在java.time.LocalDate上进行隐式Ordered

我想使用java.time.LocalDate和java.time.LocalDateTime隐含的Ordered喜欢:

val date1 = java.time.LocalDate.of(2000, 1, 1)
val date2 = java.time.LocalDate.of(2010, 10, 10)
if (date1 < date2) ...
Run Code Online (Sandbox Code Playgroud)

import scala.math.Ordering.Implicits._不起作用,因为LocalDate继承Comparable<ChronoLocalDate>而不是Comparable<LocalDate>.我怎样才能编写自己的imred命令来使用<,<=,>,> =运算符/方法进行比较LocalDate?

编辑:

我找到了一种使用隐式类的方法:

import java.time.{LocalDate}

object MyDateTimeUtils {
  implicit class MyLocalDateImprovements(val ld: LocalDate)
           extends Ordered[LocalDate] {
    def compare(that: LocalDate): Int = ld.compareTo(that)
  }
}

// Test

import MyDateTimeUtils._

val d1 = LocalDate.of(2016, 1, 1)
val d2 = LocalDate.of(2017, 2, 3)

if (d1 < d2) println("d1 …
Run Code Online (Sandbox Code Playgroud)

scala implicit java-time localdate

15
推荐指数
3
解决办法
8033
查看次数

Spring Boot与Jackson一起串行化java.time.LocalDateTime以返回ISO-8601 JSON时间戳?

我正在努力在spring-boot REST API应用程序中转换一些模型,以使用java 8 java.time.LocalDateTime而不是joda DateTime.我希望API调用返回的时间戳符合ISO_8601格式.动机是与Java 8的时间向前兼容(更多这里).

证明困难的部分是序列化包含LocalDateTimeJSON 的对象.

例如,我有以下实体:

// ... misc imports

import java.time.LocalDateTime;
import java.time.ZoneOffset;

@Data 
@Entity
@Table(name = "users")
public class User {

    @Id @Column
    private String id;

    @Column
    private String name;

    @Column
    private String email;

    @Column
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "UTC")
    private java.time.LocalDateTime createdAt;

    public User(String name, String email) {
        this.id = Utils.generateUUID();
        this.createdAt = LocalDateTime.now(ZoneOffset.UTC);
    }
}
Run Code Online (Sandbox Code Playgroud)

我还设置了application.properties关闭日期作为时间戳杰克逊功能:

spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS = false
Run Code Online (Sandbox Code Playgroud)

我的maven deps: …

serialization jackson java-8 spring-boot java-time

15
推荐指数
2
解决办法
2万
查看次数

如何在夏令时内验证当地日期时间?

Mar 12, 2017 02:39:00 "America/Chicago"不存在.当我将日期和时间设置为此值时,它不会失败.时间设定为Mar 12, 2017 03:39:00一小时后.如何通知此时间不存在.这是时间如何向前跳跃

01:59:59
3:00:00
Run Code Online (Sandbox Code Playgroud)

正如您所见02:39:00,此日期永远不会存在.

这是我正在使用的代码

package com.company;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;

public class Main {

    public static void main(String[] args) {
        ZoneId zoneId = ZoneId.of("America/Chicago");
        ZonedDateTime dateTimeStart = ZonedDateTime.of(2017, 1, 1, 15, 39, 0, 0, ZoneId.of("America/Chicago"));
        ZonedDateTime dateTimeStartUtc = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC);

        ZoneId zoneIdDst = ZoneId.of("America/Chicago");
        ZonedDateTime dateTimeStartDst = ZonedDateTime.of(2017, 3, 12, 2, 39, 0, 0, ZoneId.of("America/Chicago"));
        ZonedDateTime dateTimeStartUtcDst = dateTimeStart.withZoneSameInstant(ZoneOffset.UTC);
        int y = 90;
    } …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-time

15
推荐指数
2
解决办法
1135
查看次数

ZonedDateTime toString与ISO 8601的兼容性

我正在努力确保调用toString()我的ZonedDateTimeObject符合ISO-8601格式.

该toString()方法的文档说明:

...如果偏移和ID相同,则输出与ISO-8601兼容

这是否意味着存在一种情况,即呼叫 zdt.getOffset() 会返回不同的东西 zdt.getZone().getRules().getOffset(zdt.toInstant()) ?

这似乎没有意义.

有人可以提供偏移和ID不相同的示例(即:toString()不符合ISO-8601的地方),以便我可以更好地理解文档中的描述.

谢谢.

java time java-time zoneddatetime

15
推荐指数
2
解决办法
1万
查看次数

LocalTime在23.59和00:01之间

我想检查一下是否LocalTime是午夜.对于这种使用情况午夜被定义为任何之间23:59和00:01.这是2分钟的范围.

private final LocalTime ONE_MINUTE_BEFORE_MIDNIGHT = LocalTime.of(23, 59, 0);
private final LocalTime ONE_MINUTE_AFTER_MIDNIGHT = LocalTime.of(0, 1, 0);
Run Code Online (Sandbox Code Playgroud)

我有一个方法

public boolean isAtMidnight(LocalTime time) {
    return time.isAfter(ONE_MINUTE_BEFORE_MIDNIGHT)
        && time.isBefore(ONE_MINUTE_AFTER_MIDNIGHT);
}
Run Code Online (Sandbox Code Playgroud)

此方法始终返回false.即使是LocalTime.MIDNIGHT.但它应该回归true.

如何查看+-1午夜时间是否分钟?

java time localtime java-time

15
推荐指数
2
解决办法
1627
查看次数

java 15 纳秒精度导致 Linux 环境出现问题

我有一个关于映射Instant到 PostgreSQL 的最佳实践问题TIMESTAMP。

我们已将应用程序更新到 Java 15,系统时钟的新增强功能为纳秒精度 ( https://bugs.openjdk.java.net/browse/JDK-8242504 ) 与 Postgres 中的 TIMESTAMP 限制不兼容。时间根据底层操作系统的不同而不同,Mac (Big Sur) 中的 Instant 不提供以纳秒为单位的时间,但 Linux 中提供。

我们在代码库中使用即时类型。我们的测试正在比较内存中的 Instant 类型的对象与获取的对象,因此它们会失败,具体取决于它们运行的​​操作系统。

在Linux中,内存中的Instant对象的精度为纳秒,而Postgres存储的Instant(TIMESTAMP)的精度为微秒。断言失败:

java.lang.AssertionError: expected [2021-01-04T19:32:23.726475249Z] but found [2021-01-04T19:32:23.726475Z]
Run Code Online (Sandbox Code Playgroud)

在 Mac 中,Instant 对象的精度为微秒,与 Postgres 的时间戳精度充分一致,因此测试会像迄今为止所做的那样通过。

我们希望避免截断 Instant 或向 PG 添加插件来支持纳秒。

其他人如何以稳健、全面的方式处理这个问题?

java postgresql java-time java-15

15
推荐指数
0
解决办法
2260
查看次数