小编Ole*_*.V.的帖子

使用 Spring Rest 服务时在 Date 中获取错误的时间

这是我的 pojo 课

public class TeTripCarDtl implements Serializable {

    private static final long serialVersionUID = -7601044160087552575L;

    @Id
    @Column(name = "CAR_ID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long carId;

    @Column(name = "TRIP_ID")
    private long tripId;

    @Column(name = "VEHICLE_TYPE")
    private String vehicleType;

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "PICKUP_DATE_TIME")
    private Date pickUpDateTime;// Here I am getting wrong time value

    @Temporal(value = TemporalType.TIMESTAMP)
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", shape = JsonFormat.Shape.STRING)
    @Column(name = "RETURN_DATE_TIME")
    private Date returnDateTime;// Here I am getting wrong time value …
Run Code Online (Sandbox Code Playgroud)

java spring datetime jackson java.util.date

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

java.sql.SQLException:java.sql.Time的非法小时值'50',值为'50:51:05

当我尝试从MySQL检索时间并将其设置为a时JLabel,它会给我一个错误.

java.sql.SQLException:java.sql.Time的非法小时值'50',值为'50:51:05.

任何人都可以建议我如何解决这个问题?

代码如下.

        String sql = "SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(ot)))"
                + " FROM attendance"
                + " WHERE department = '"+department+"'"
                + "   AND date BETWEEN '"+dateChooser1+"' AND '"+dateChooser2+"'";
        st = con.createStatement();
        rst = st.executeQuery(sql);
        if(rst.next())
        {
            String time = rst.getString(1);
            oTimeTemp.setText(time);
        }
Run Code Online (Sandbox Code Playgroud)

java mysql time duration

5
推荐指数
1
解决办法
1554
查看次数

具有灵活后备值的java.time DateTimeFormatter解析

我正在尝试将一些代码从joda时间移植到Java时间。

JodaTime可以这样指定当年的后备值

parser.withDefaultYear((new DateTime(DateTimeZone.UTC)).getYear()).parseDateTime(text);
Run Code Online (Sandbox Code Playgroud)

不管解析器的外观如何(如果包含一年或不包含一年),都将对其进行解析。

那里的java.time变得更加严格。即使有DateTimeFormatterBuilder.parseDefaulting()允许您指定后备方法的方法,也只有在您要解析的日期中指定该特定字段或将其标记为可选时,该方法才有效。

如果您对传入的日期格式没有任何控制权(由用户提供),则这将使调用时变得非常困难parseDefaulting

是否有任何解决方法,可以在其中指定通用回退日期(如果未指定其值,则格式化程序将使用其值)之类的东西,或者在格式化程序中指定后,如何配置未使用的回退值?

以下是最小,完整和可验证的示例。

public static DateTimeFormatter ofPattern(String pattern) {
    return new DateTimeFormatterBuilder()
        .appendPattern(pattern)
        .parseDefaulting(ChronoField.YEAR, 1970)
        .toFormatter(Locale.ROOT);
}

public void testPatterns() {
    // works
    assertThat(LocalDate.from(ofPattern("MM/dd").parse("12/06")).toString(), is("1970-12-06"));
    assertThat(LocalDate.from(ofPattern("uuuu/MM/dd").parse("2018/12/06")).toString(), is("2018-12-06"));
    // fails with exception, as it uses year of era
    assertThat(LocalDate.from(ofPattern("yyyy/MM/dd").parse("2018/12/06")).toString(), is("2018-12-06"));
}
Run Code Online (Sandbox Code Playgroud)

所需的结果:测试应解析字符串并通过(“呈绿色”)。

观察到的结果:测试的最后一行引发异常,并显示以下消息和堆栈跟踪。

文本'2018/12/06'无法解析:发现冲突:1970年与2018年不同

Exception in thread "main" java.time.format.DateTimeParseException: Text '2018/12/06' could not be parsed: Conflict found: Year 1970 differs from Year 2018
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1959)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1820)
    at com.ajax.mypackage.MyTest.testPatterns(MyTest.java:33) …
Run Code Online (Sandbox Code Playgroud)

java time datetime datetime-parsing java-time

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

在Java中使用国家代码获取地区的时区

我必须传递带有时区信息的消息 (jms),例如 (America/Los_Angeles),但我只有国家/地区名称和代码。如果可能的话,用 Java 代码获取时区信息。我在某处读到这个:

System.out.println(TimeZone.getTimeZone("US"));
Run Code Online (Sandbox Code Playgroud)

但它的输出为

sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Run Code Online (Sandbox Code Playgroud)

我期待“美国/洛杉矶”的名单,......

java timezone google-api-java-client java-8 java-calendar

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

如果返回的Optional具有值,则返回可选,否则调用另一个函数

我有两个方法func1和func2返回Optional.如果从func1返回的Optional具有值,则返回可选,否则调用func2并返回其Optional.一种方法是使用if-else.

Optional<MyObject> opt1 = func1();
if (opt1.isPresent()) {
    return opt1;
}
return func2();
Run Code Online (Sandbox Code Playgroud)

但是,我希望使用Java 8 Optional来实现它并避免使用它if-else.

就像是:

return Optional.of(obj1) 
        .flatMap_returnOptionalIfvaluePresent(func1)
        .orElseReturnOptionalFromThis(func2)
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一个好方法吗?

java optional java-8 flatmap

5
推荐指数
1
解决办法
757
查看次数

以本地化顺序列出&lt;DayOfWeek&gt;

我们有一个DayOfWeek枚举,以标准的ISO 8601顺序定义星期几。

我想要List这些对象中的一个适合于的顺序Locale

我们可以轻松地确定一周中第一天的区域设置。

Locale locale = Locale.CANADA_FRENCH ;
DayOfWeek firstDayOfWeek =  WeekFields.of( locale ).getFirstDayOfWeek() ;
Run Code Online (Sandbox Code Playgroud)

设置List

List< DayOfWeek > dows = new ArrayList<>( 7 ) ;  // Set initial capacity to 7, for the seven days of the week.
dows.add( firstDayOfWeek ) ;
Run Code Online (Sandbox Code Playgroud)

?要将每周的其他六天添加到该列表中,最简单/最短/最优雅的方法是什么?

java dayofweek java.time

5
推荐指数
1
解决办法
79
查看次数

Instant.EPOCH的Java 8时区不正确

我有一台Linux机器,其时区设置为Asia / Qatar。当我使用格式化程序打印Instant.EPOCH时,它给我错误的区域信息,而对于Instant.now(),区域信息是正确的。下面是我的代码及其输出。谁能帮我,为什么会有这个差异?

import java.util.Date;
import java.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.ZoneId;

public class DateTest {
   public static void main(String[] args) {
      String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z";
      Instant myInstant = Instant.EPOCH;
      Instant myInstantNow = Instant.now();
      DateTimeFormatter formatter =  DateTimeFormatter.ofPattern(pattern).withZone(ZoneId.systemDefault());
      System.out.println(formatter.format(myInstant));
      System.out.println(formatter.format(myInstantNow));
   }
}
Run Code Online (Sandbox Code Playgroud)

代码的输出为:

1970-01-01T04:00:00.000 +0400
2019-09-29T18:30:14.766 +0300
Run Code Online (Sandbox Code Playgroud)

Java版本:“ 1.8.0_181”

如果我在Windows中运行相同的代码,它的工作正常。我的Instant.EPOCH也得到+0300。

java timezone timezone-offset java-8

5
推荐指数
1
解决办法
97
查看次数

为什么 Jackson 将 ZonedDateTime 转换为十进制?

我试图理解为什么 Jackson 在 Spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal ?

这是预计日期:2019-10-01T10:10:44+02:00[欧洲/巴黎] 实际结果:1572426644.000000000

java spring jackson zoneddatetime

5
推荐指数
1
解决办法
1358
查看次数

OffsetDateTime - 打印偏移量而不是 Z

我有这个代码:

String date = "2019-04-22T00:00:00+02:00";

OffsetDateTime odt = OffsetDateTime
      .parse(date, DateTimeFormatter.ISO_OFFSET_DATE_TIME)                             
      .withOffsetSameInstant(ZoneOffset.of("+00:00"));

System.out.println(odt);
Run Code Online (Sandbox Code Playgroud)

这个打印: 2019-04-21T22:00Z

如何打印2019-04-21T22:00+00:00?用 offset 代替Z.

java datetime-format timezone-offset java-time

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

java.text.ParseException:无法解析的日期:“...”

我使用此代码收到此错误:

SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd MMMM HH:mm yyyy",myDateFormatSymbols);
sdf.parse("????????? 12 ??????? 07:00 2021");
Run Code Online (Sandbox Code Playgroud)

"Monday 12 April 07:00 2021"。问题是,每当我将日期从星期一更改为星期二 ( "????????") 时,我都不会收到此错误,并且代码有效。这是代码myDateFormatSymbols

private final static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){
        @Override
        public String[] getWeekdays(){
             return new String[]{"?????????","????????", "??????", "??????", "???????", "??????", "??????"};
        }
        @Override
        public String[] getMonths() {
            return new String[]{...};
        }
}
Run Code Online (Sandbox Code Playgroud)

所有月份和工作日都正常工作,似乎这个错误只发生在星期一。

java dayofweek simpledateformat datetime-parsing java-time

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