标签: java-time

上周是java.time.LocalDate吗?

我有一个每周统计系统,我想检查统计数据最后一次更新是否是上周.如果是的话,我想清除它.

目前,日期存储在LocalDate:

LocalDate lastUpdate;
Run Code Online (Sandbox Code Playgroud)

我已经有了这样的日常统计数据:

if(lastUpdate.isBefore(LocalDate.now())
{
    clearDailyStatistics();
}
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

if(/* something here? */)
{
    clearWeeklyStatistics();
}
Run Code Online (Sandbox Code Playgroud)

所以,问题是:我如何比较LocalDate对象的周数?不需要形成周的不同"标准" - 周一到周日将被使用(如Java DayOfWeek课程已经使用的那样).

请保留您关于Java 8 java.time类,没有Joda-Time或其他外部库的注释和答案.

java time date java-time

4
推荐指数
1
解决办法
1110
查看次数

postgres中的"带时区的时间戳"的Jooq绑定

Jooq目前不支持JSR 310类型,直到v3.8才会支持.

使用简单的转换器通常可以工作,除了某些类型,例如postgres' TIMESTAMP WITH TIME ZONE,它需要自定义绑定.所以我尝试编写一个,但生成的XxxRecord类仍然使用Timestamp数据类型作为TIMESTAMP WITH TIME ZONE我的数据库中的字段.

我需要在下面的代码中更改以将postgres' TIMESTAMP WITH TIME ZONE视为Instantjooq生成的类中的内容?

变流器

public class TimestampConverter implements Converter<Timestamp, Instant> {
  @Override public Instant from(Timestamp ts) {
    return ts == null ? null : ts.toInstant();
  }
  @Override public Timestamp to(Instant instant) {
    return instant == null ? null : Timestamp.from(instant);
  }
  @Override public Class<Timestamp> fromType() { return Timestamp.class; }
  @Override public Class<Instant> toType() { return …
Run Code Online (Sandbox Code Playgroud)

java postgresql jooq java-8 java-time

4
推荐指数
1
解决办法
1845
查看次数

DateTimeFormatter的年份的最后一位数字

这一年2014我想要展示4和为2029 -> 9

我知道如何格式化4位=> yyyy和两位=>yy

但我无法理解,如何用最后一个数字来做

DateTimeFormatter.ofPattern("yMMdd"); //returns 20151020. I want just 51020
Run Code Online (Sandbox Code Playgroud)

java date java-8 java-time

4
推荐指数
2
解决办法
1153
查看次数

使用DecimalStyle

我无法理解DecimalStyle如何影响我使用DateTimeFormatter进行格式化/解析.如果我尝试:

date = LocalDateTime.now();
DecimalStyle ds = DecimalStyle.of(Locale.GERMAN);
formatter = DateTimeFormatter.ofPattern("yyyy").withDecimalStyle(ds.withDecimalSeparator('?'));
text = formatter.format(date);
System.out.println("DecimalStyle: " + text);
Run Code Online (Sandbox Code Playgroud)

我不应该得到类似的东西:输出中的2.016?我实际看到的是,无论我设置什么参数ds,它都不会影响实际格式化的String.这是java 8 API,不幸的是,在互联网上找不到多少.

java java-8 java-time

4
推荐指数
1
解决办法
219
查看次数

根据当前时间获取特定的15分钟时间范围

我想根据当前时间得到15分钟的时间表.

例如:

时间表适用于every 15 minutes.

即12比1被分成四个时间帧 [ 12:00 to 12:15, 12:16 to 12:30, 1:31 to 12:45, 12:46 to 1:00]

如果当前时间是12:34平均值,我需要返回时间帧12:31 to 12:45

我们可以使用Java 8 Date和Time API轻松完成这项工作吗?

java java-8 java-time

4
推荐指数
1
解决办法
949
查看次数

Java 8:如何用毫秒,微秒或纳秒创建DateTimeFormatter?

我需要创建用于解析时间戳的格式化程序,并带有可选的毫秒,微米或毫微秒的分数。

例如,根据我的需要,我看到了以下机会:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                   .append(DateTimeFormatter.BASIC_ISO_DATE)
                                   .appendLiteral('-')
                                   .append(DateTimeFormatter.ISO_LOCAL_TIME)
                                   .appendOffset("+HH:mm", "Z")
                                   .toFormatter();
Run Code Online (Sandbox Code Playgroud)

或者也可以使用appendFraction(field, minWidth, maxWidth, decimalPoint)。

但是,在这些情况下,可以解析任意数量的小数(最多9个或maxWidth)的时间戳。如何实现我们只能在逗号​​后解析(可选)仅3、6或9个数字?

应该可以解析以下时间部分:

  • HH:mm:ss.SSS
  • HH:mm:ss.SSSSSS
  • HH:mm:ss.SSSSSSSSS

但无法解析:HH:mm:ss.SSSS。

java time parsing java-time

4
推荐指数
2
解决办法
6732
查看次数

如何将时间戳字符串转换为纪元时间?

我的格式有时间戳2017-18-08 11:45:30.345.
我想将它转换为纪元时间,所以我在下面做:

String timeDateStr = "2017-18-08 11:45:30.345"; 
DateTimeFormatter dtf  = DateTimeFormatter.ofPattern("yyyy-dd-MM HH:mm:ss.SSS");
ZonedDateTime     zdt  = ZonedDateTime.parse(timeDateStr, dtf);        
System.out.println(zdt.toInstant().toEpochMilli());
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

java.time.format.DateTimeParseException:无法解析文本'2017-18-08 11:45:30.345':无法从TemporalAccessor获取ZonedDateTime

我也尝试过不同的格式,但仍然会出错.

java timestamp epoch datetime-parsing java-time

4
推荐指数
1
解决办法
6214
查看次数

Java 8日期时间格式化程序行为不端

我有以下代码抛出DateTimeParseException:

String dateString = "Jul 20 09:32:46"
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("L d HH:mm:ss");
return ZonedDateTime.parse(dateString, formatter);
Run Code Online (Sandbox Code Playgroud)

根据文档,您将观察到这Jul是角色的示例L.

但是,异常消息是:

java.time.format.DateTimeParseException:无法在索引0处解析文本"Jul"

我错过了什么?

java datetime datetime-parsing java-8 java-time

4
推荐指数
1
解决办法
163
查看次数

Instant.parse和RFC3339字符串引发java.time.format.DateTimeParseException

如果我做

import java.time.Instant;
...
    Instant instant = Instant.parse("2018-01-02T18:14:59.000+01:00")
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

Caused by: java.time.format.DateTimeParseException: Text '2018-06-19T23:00:00.000+01:00' could not be parsed at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1777)
Run Code Online (Sandbox Code Playgroud)

但是如果我这样做

    Instant instant = Instant.parse("2018-06-19T23:00:00.000Z");
Run Code Online (Sandbox Code Playgroud)

一切正常。

我想念什么?第一次字符串有什么问题?

java java-8 java-time

4
推荐指数
1
解决办法
878
查看次数

TimeZone.getTimeZone(“ PST”)与TimeZone.getTimeZone(“ America / Los_Angeles”)

我正在使用Java 8,

在我们的代码的早期,sdf.setTimeZone(TimeZone.getTimeZone("PDT"));由于PDT不是有效的ZoneId ,我们曾 用来转换到失败的美国太平洋地区(未引发任何错误,而是转换为默认时区)。

因此,我寻找值中setTimeZone(TimeZone.getTimeZone("PST"));也不可用的那个TimeZone.getAvailableIDs()。

最后我最终使用 sdf.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));

现在,我们的一位朋友曾经使用setTimeZone(TimeZone.getTimeZone("PST"));过转换为美国太平洋时区,并且转换正常进行。

问题是

TimeZone.getTimeZone("PST");和之间有什么区别TimeZone.getTimeZone("America/Los_Angeles");

哪个更好用?

java timezone jodatime java-8 java-time

4
推荐指数
1
解决办法
633
查看次数