标签: java-time

如何在纯 Java 8 中获取给定日历周的所有周日期列表?

有很多 例子可以说明如何使用Joda-Time和旧的java.util.Calendar / java.util.Date API来完成类似的事情,但是没有完整的例子说明如何使用纯java.time API来实现它,没有任何额外的依赖。

还有很多例子,如何为给定的两个日期生成日期。但是我无法找到如何为给定年份和日历周数生成一周日期的完整示例。

您能否提供一个在纯Java 8 / java.time API中执行此操作的示例?

java-8 java-time

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

如何检查 Date 对象或 Calendar 对象是否为有效日期(真实日期)?

SimpleDateFormat 类的方法:

public void setLenient(boolean lenient)
Run Code Online (Sandbox Code Playgroud)

指定日期/时间解析是否宽松。通过宽松解析,解析器可以使用试探法来解释与此对象格式不精确匹配的输入。使用严格解析,输入必须与此对象的格式匹配。

或Calendar类的方法:

public void setLenient(boolean lenient)
Run Code Online (Sandbox Code Playgroud)

指定日期/时间解释是否宽松。对于宽松解释,诸如“February 942, 1996”之类的日期将被视为等同于 1996 年 2 月 1 日之后的第 941 天。对于严格(非宽松)解释,此类日期将导致抛出异常。默认是宽松的。

检查格式的一致性或滚动日期。

我想确认MM-DD-YYYY(02-31-2016)的日期是否应该返回无效,因为 2 月的 31 天不是一个真实的日期,所以 04-31-1980 也应该返回无效。

不想使用 Java 8 中的 Joda 时间 API,但是对此的任何建议将不胜感激。

java datetime date java-8 java-time

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

为什么 Spring 在绑定用 @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 注释的 LocalDateTime 时忽略输入字符串的时间偏移?

我有一个Activity带有该字段的对象:

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime start;
Run Code Online (Sandbox Code Playgroud)

我通过发送表单将此对象绑定到控制器方法:

@RequestMapping(value = "update", method = RequestMethod.POST)
public String submitUpdateActivityForm(Activity activity) {
      activityRepository.save(activity);
      return "successPage;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Spring Boot 1.5.1、Spring MVC 4.3.6,并且在我的 Web 应用程序中,我希望从任何时区的客户端接收时间,但LocalDateTime始终保持UTC。但是当 Spring 将对象从表单绑定到控制器中的请求参数时,它完全忽略了 type 属性的输入字符串的时间偏移LocalDateTime。

我认为根据@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)Spring 的文档会找到字符串中的偏移量并将输入日期时间从给定的时区转换为我的服务器的时区(即 UTC)然后绑定。

例如:我希望将字符串2017-05-31T12:00-03:00转换为LocalDateTime '2017-05-31T15:00'并2017-05-31T12:00Z在不更改的情况下解释为LocalDateTime '2017-05-31T12:00'. 不幸的是,LocalDateTime无论时间偏移如何,我总是得到。

这是正确的行为@DateTimeFormat还是我做错了什么?我应该实现 SpringConverter还是扩展PropertyEditorSupport?

这是处理时间的正确方法吗?我想接受任何类型的日期,但将它们保留在 UTC 中,LocalDateTime因为这样我就可以轻松地将它们发送到客户端,在那里我可以将它们从 UTC 转换为客户端的本地时区并显示。

spring datetime spring-mvc java-time

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

如何避免时差之间的负时间?

我正在开发一个我正在使用Java8 Time的应用程序.我正面临一个问题.

假设时间A是08:00,时间B是17:00,所以这两次之间的差异将是9h,在我的情况下是正确的,但如果时间A是18:00而时间B是02:00它应该是8h,但在我的情况下我的程序返回-16.请有人指导我如何解决这个问题.

我的代码:

@Test
public void testTime()
{
    DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");

    String s = "18:00";
    String e = "02:00";

    // Parse datetime string to java.time.LocalDateTime instance
    LocalTime startTime = LocalTime.parse(s, format);
    LocalTime endTime = LocalTime.parse(e, format);

    String calculatedTime = ChronoUnit.HOURS.between(startTime, endTime)%24 + ":"
            + ChronoUnit.MINUTES.between(startTime, endTime)%60;

    System.out.println(calculatedTime);

}
Run Code Online (Sandbox Code Playgroud)

java time localtime java-8 java-time

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

将带有 zoneId 的字符串本地日期转换为 UTC Offsetdate JAVA

我正在尝试将巴西本地日期转换为 UTC 格式。我已经开发了我的解决方案,但我相信它可以改进。我一直在寻找其他问题,但没有成功。

我的问题是,当我使用以下方法处理Date对象时:

Instant endDateTime = questionDate.toInstant();
Run Code Online (Sandbox Code Playgroud)

我收到一个 UTC 日期,"2017-11-16T00:00:00Z"但这应该是巴西本地日期(不正确,因为它有尾随"Z"),当我尝试转换为 UTC 时,我收到相同的输出。

另一方面,如果我使用ZoneDateTimeclass 并使用LocalDateTimeobject构建日期,我会在输出中丢失秒数:"2017-11-16T02:00Z". 当我使用时会发生这种情况:

LocalTime.of(hour, minutes, seconds);
Run Code Online (Sandbox Code Playgroud)

我搜索LocalTime课堂,我认为这是因为分钟或秒,0但我不确定。

解决方案的问题:

  1. 响应没有秒
  2. 我希望 Java 8 有一组功能可以让这更简单明了

前提:

  • 我不能使用 Joda 库
  • 结果必须是OffsetDateTime类
  • 输入:日期 "2017-11-16"
  • 输出: "2017-11-16T02:00:00Z"

这是我的解决方案:

private static OffsetDateTime processDate(Date questionDate) {
  Instant endDateTime = questionDate.toInstant();
  ZoneId zoneId = ZoneId.of(ZONEID);
  String [] date = endDateTime.toString().split("T");
  LocalDateTime localDateTime = convertLocalTimeToUtc(date);
  ZonedDateTime zonedDateTime = …
Run Code Online (Sandbox Code Playgroud)

java date utc java-8 java-time

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

JDK8 调整 java.time.Instant 的时间

我正在尝试调整 a 的时间java.time.Instant。

我试过这个代码:

Instant validFrom = //from my method parameter
validFrom = validFrom.with(ChronoField.HOUR_OF_DAY, 19).with(ChronoField.MINUTE_OF_DAY, 00)
                    .with(ChronoField.SECOND_OF_DAY, 00).with(ChronoField.MILLI_OF_DAY, 00);
Run Code Online (Sandbox Code Playgroud)

但我有一个例外:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay
    at java.time.Instant.with(Instant.java:720)
Run Code Online (Sandbox Code Playgroud)

这是非常值得阅读文档和检查源代码的。我不太清楚为什么我不能这样做。是否有另一种方法可以进行此操作而不会引起许多转换?

java java-time

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

我的程序出现java.time.LocalDateTime错误

我的代码没有显示正确或所需的输出问题.这是我写的代码.

import java.time.LocalDateTime;
public class DriversLicense
{
   private String name;
   private int id;
   private int expYear;
   private int expMonth; 
   private int expDay;


    public DriversLicense(String name, int id, int expYear, int expMonth, int expDay)
    {
        this.name = name;
        this.id = id;
        this.expYear = expYear;
        this.expMonth = expMonth;
        this.expDay = expDay;
    }

    public boolean isExpired()
    {
        LocalDateTime date = LocalDateTime.now();

        boolean tORf = false;

        int year = date.getYear();
        int month = date.getMonthValue();
        int day = date.getDayOfMonth();

        if(year > this.expYear && month > …
Run Code Online (Sandbox Code Playgroud)

java datetime datetime-comparison java-time

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

计算两个 OffsetDateTimes 之间的月数

我正在使用 java 8 并且我正在尝试计算两个 OffsetDateTime 对象之间的月数。做这个的最好方式是什么?

java datetime date-difference java-time

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

在 Android 手机上部署应用程序时找不到 java.time.LocalDateTime 的类

当我在我的 android 手机上部署我的 android 应用程序时,我面临 ClassNotFoundException。

我尝试在具有 Android 6.0.1 和 Android 7.1.1 的 Android 手机上

而当我在模拟器(Nexus 5X API 26)上部署相同的应用程序并运行 Android 8.0 时,我没有遇到任何问题。该应用程序加载顺利。

Build.gradle (app) 文件有

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "de.pfiva.mobile.voiceassistant"
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经包含了来自本地 Maven 的依赖项。此依赖项基本上具有纯 Java 类 (POJO)。在一些类中有 java.time.LocalDateTime 类型的字段

我该如何解决这个问题。寻找建议。

谢谢。

例外 :

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: de.pfiva.mobile.voiceassistant, PID: 25245
                  java.lang.NoClassDefFoundError: Failed resolution of: …
Run Code Online (Sandbox Code Playgroud)

java android java-time

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

为什么使用相同的时区获取不同的 localDate

java.sql.Date date = java.sql.Date.valueOf("1900-01-01");
org.joda.time.LocalDate localDate = new org.joda.time.LocalDate(date);
Run Code Online (Sandbox Code Playgroud)

基于上面的代码,我做了一些测试如下:

  • 问题 #1 为什么我会得到具有相同时区的不同 localDate 对象?

如果我将本地时区更改为UTC+8 Singapore Timezone,将会得到1899-12-31

如果我将本地时区更改为UTC+8 China Timezone,将会得到1900-01-01

  • 问题 #2 为什么我在不同的时区得到相同的时间?

如果我将本地时区更改为UTC-8 America/Los_Angeles Timezone,将会得到1900-01-01

如果我将本地时区更改为UTC+8 China Timezone,将会得到1900-01-01

有人可以帮忙澄清一下吗??它有点困惑。

java datetime date jodatime java-time

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