这是我的 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) 当我尝试从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) 我正在尝试将一些代码从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) 我必须传递带有时区信息的消息 (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)
我期待“美国/洛杉矶”的名单,......
我有两个方法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)
任何人都可以建议一个好方法吗?
我们有一个DayOfWeek枚举,以标准的ISO 8601顺序定义星期几。
我们可以轻松地确定一周中第一天的区域设置。
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)
?要将每周的其他六天添加到该列表中,最简单/最短/最优雅的方法是什么?
我有一台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。
我试图理解为什么 Jackson 在 Spring 集成测试中获取 MvcResult 时将 ZonedDateTime 转换为 Decimal ?
这是预计日期:2019-10-01T10:10:44+02:00[欧洲/巴黎] 实际结果:1572426644.000000000
我有这个代码:
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.
我使用此代码收到此错误:
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)
所有月份和工作日都正常工作,似乎这个错误只发生在星期一。