我正在尝试解析: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.time.LocalTime对象转换为java.util.Date但无法找到任何合适的方法.这样做的正确方法是什么?
有没有什么理由为什么java似乎没有内置的直接转换方法?
可能的重复:
如何转换joda时间 - 对我不起作用,可能我错过了一些"joda"库?
如何将Date转换为LocalTime? - 这反过来解决转换问题.
我正在探索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) 我正在尝试构建一个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.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) 我正在努力在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: …
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) 我正在努力确保调用toString()我的ZonedDateTimeObject符合ISO-8601格式.
该toString()方法的文档说明:
...如果偏移和ID相同,则输出与ISO-8601兼容
这是否意味着存在一种情况,即呼叫
zdt.getOffset()
会返回不同的东西
zdt.getZone().getRules().getOffset(zdt.toInstant())
?
这似乎没有意义.
有人可以提供偏移和ID不相同的示例(即:toString()不符合ISO-8601的地方),以便我可以更好地理解文档中的描述.
谢谢.
我想检查一下是否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午夜时间是否分钟?
我有一个关于映射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 添加插件来支持纳秒。
其他人如何以稳健、全面的方式处理这个问题?