标签: java-time

Joda BetweenDays (LocalDate,LocalDate) 不适用

我在使用 Joda 函数时遇到问题daysBetween。它不断地告诉我

The method daysBetween(ReadableInstant, ReadableInstant) in the type Days is not applicable for the arguments (LocalDate, LocalDate)
Run Code Online (Sandbox Code Playgroud)

当我尝试插入两个localdate项目时。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
        LocalDate date = LocalDate.parse(reviewDate, formatter);
        Date dateNow = new Date();
        LocalDate date1 = LocalDate.parse(dateNow.toString(),formatter);
        int days = Days.daysBetween(date,date1).getDays();
Run Code Online (Sandbox Code Playgroud)

我试图获取reviewDate与当前日期之间的天数date1我做错了什么?

java datetime jodatime java-time

3
推荐指数
1
解决办法
4106
查看次数

从微秒创建 Java DateTime Instant

自 Java 9 以来 Java 日期和时间 API 发生了变化。 LocalDateTime 现在具有微秒精度。

Java 9 具有 java.time.Clock 的全新实现,能够以比毫秒(十进制小数的三位数字)更精细的分辨率捕获当前时刻。

我们从后端服务中获得以微秒为单位的时间。

System.currentTimeMillis  > 1565245051795    > 2019-08-08T06:17:31.795
Service.getTime           > 1565245051795306 > 2019-08-08T06:17:31.795306
Run Code Online (Sandbox Code Playgroud)

为了构造在我们的应用程序中使用的 LocalDateTime,我们执行

long timeMicros = service.getTime();
long timeMillis = timeMicros / 1000;
LocalDateTime ldt = Instant.ofEpochMilli(timeMillis).atZone(ZoneId.systemDefault()).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)

为了查询服务,我们再次需要时间微秒,然后我们做

long timeMillis = dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long timeMicros = timeMillis * 1000;
Run Code Online (Sandbox Code Playgroud)

问题是我们没有取回时间微秒的精度。

是否可以创建具有微秒精度的 Instant ?
我们现在使用的是 Java 11。当我们的一个 JUnit 测试由于增加的微秒精度而失败时,我注意到了这一变化。

对于 JUnit 测试,我找到了一个解决方法:

private static final LocalDateTime START = LocalDateTime.now().truncatedTo(ChronoUnit.MILLIS);
Run Code Online (Sandbox Code Playgroud)


我不确定这是一种解决方法还是实际的解决方案,但添加时间戳的最后三微秒数字似乎有效。

System.currentTimeMillis  > 1565245051795    > 2019-08-08T06:17:31.795
Service.getTime           > …
Run Code Online (Sandbox Code Playgroud)

java java-time java-9 java.time.instant java-11

3
推荐指数
1
解决办法
2651
查看次数

如何使用LocalDateTime从Java 8中的String创建长时间的毫秒数?

我有一个输入日期格式yyyy-MM-dd_HH:mm:ss.SSS,并以这种方式将其转换为 long:

SimpleDateFormat simpleDateFormat = 
                   new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS");
try {
    Date date = simpleDateFormat.parse(lapTime);
    time = date.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

并且,经过一些操作后,mm:ss.SSS从 long 返回:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss.SSS");
return simpleDateFormat.format(new Date(time));
Run Code Online (Sandbox Code Playgroud)

如何将我的旧样式代码更改为 Java8?我看了LocalDateTime和Instant类,但不知道如何正确使用它们。

datetime java-8 java-time

3
推荐指数
1
解决办法
266
查看次数

时间格式最终在生产中发生变化

我有以下代码以某种格式获取当前时间。当我在我的笔记本电脑上测试它时,这在本地工作得非常好。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS z");
ZonedDateTime date = ZonedDateTime.now();
String timeStamp = formatter.format(date);
Run Code Online (Sandbox Code Playgroud)

以上在本地工作,时间戳值采用以下格式:2020-02-24 05:23:20.675 MST

但是当我将其推送到生产时,格式更改为:2020-02-24 05:23:20.675 -07:00

我无权访问生产设置,处理它的团队在另一个时区,现在无法获得它们。相信这是他们最后的一些设置,但有什么我可以做的,格式总是像:2020-02-24 05:23:20.675 MST?

请指教,谢谢。

java date java-8 java-time

3
推荐指数
1
解决办法
105
查看次数

如何在 Java 中解析自定义的多种日期格式

我想在 Java 中解析自定义的多种日期格式。这是我的代码

场景 1: 模式的顺序:

  • yyMMdd'h'HH
  • 年月日

DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendOptional(DateTimeFormatter.ofPattern("yyMMdd'h'HH")) .appendOptional(DateTimeFormatter.ofPattern("yyMMdd")).toFormatter();

作品:

String dateString1 = "201028h05";

LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);
Run Code Online (Sandbox Code Playgroud)

不起作用:

String dateString2 = "201028";

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
Run Code Online (Sandbox Code Playgroud)

场景 2: 模式的顺序:

  • 年月日
  • yyMMdd'h'HH

DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendOptional(DateTimeFormatter.ofPattern("yyMMdd")).toFormatter(); .appendOptional(DateTimeFormatter.ofPattern("yyMMdd'h'HH"))

不起作用:

  String dateString1 = "201028h05";
    
    LocalDateTime date1 = LocalDateTime.parse(dateString1, formatter);
    
Run Code Online (Sandbox Code Playgroud)

作品:

String dateString2 = "201028";

LocalDateTime date1 = LocalDateTime.parse(dateString2, formatter);
Run Code Online (Sandbox Code Playgroud)

无论任何输入模式顺序如何,如何使其适用于两种日期模式。我不想为此使用任何外部依赖。

java java-time

3
推荐指数
1
解决办法
72
查看次数

如果我提供月份和日期作为可选,如何将字符串转换为有效的日期格式

我想将我的字符串转换为有效的日期格式,即使月份和日期是可选的

例如,我有如下字符串

String date1 = "20-12-2021"
String date2 = "12-2021" i.e without day
String date3 = "2021" i.e without day & month
String date4 = "21" i.e without day, month & just last two digits of the year
Run Code Online (Sandbox Code Playgroud)

我想将上述所有字符串格式转换为“yyyy-mm-dd”格式的有效日期,如下所示,

For date1, Date should be "2021-12-20" 
For date2, Date should be "2021-12-01"
For date3, Date should be "2021-01-01" 
For date4, Date should be "2021-01-01"
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?任何信息都会非常有帮助。我无法定义为解析器格式化的单个字符串,因为在我的场景中字符串格式是不可预测的。

java date java-time

3
推荐指数
1
解决办法
95
查看次数

从包含周名和时间的字符串中解析时间

我正在尝试仅解析时间,忽略字符串中的工作日,格式如下:“星期一早上 5 点”

这是我的代码:

String dateTxt = "Monday 5AM";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ha");
LocalTime lt = LocalTime.parse(dateTxt, formatter);
Run Code Online (Sandbox Code Playgroud)

它抛出一个异常: java.time.format.DateTimeParseException: Text 'Saturday 1AM' could not be parsed

如何仅从该字符串解析时间?

java java-time

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

SimpleDateFormat - 格式 - 九月 - JDK16

我刚刚将 Java 从 JDK-15 升级到 JDK-16,在Date使用SimpleDateFormat. 仅使用 9 月份进行格式化时yyyy-MMM-dd就给出了 4 个字符而不是 3 个字符。

例如: 2021-Sep-11显示为2021-Sept-11

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, 150);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd");
    System.out.println(cal.getTime());

    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
Run Code Online (Sandbox Code Playgroud)

对我来说看起来像一个错误。我在发行说明中看不到对此的任何更新。有人面临类似的问题吗?一直工作到 JDK-15。

java date datetime-format java-time java-16

3
推荐指数
1
解决办法
229
查看次数

LocalDate:等于与 isEqual

LocalDate在 Java 中有两个类似的方法equals和isEqual.
它们之间有什么区别?
当他们输出不同的结果时?

java equals jsr310 java-time localdate

3
推荐指数
1
解决办法
188
查看次数

如何在 Java 中将字符串时间转换为长毫秒

我正在尝试使用下面的代码将时间字符串转换为毫秒。因为我会将时间用作倒数计时器。

问题是时间来自数据库并且它是 varchar 类型。我试过这段代码,但它没有给我正确的输出。

String timeDuration = "10:00"; //for example only
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
Date time = sdf.parse(timeDuration);
long millis = time.getTime(); //The output must be 600000
Run Code Online (Sandbox Code Playgroud)

我使用此代码得到错误的“毫秒”。

我正在使用 Android Studio。

java duration java-time

3
推荐指数
1
解决办法
93
查看次数