![](/img/trans.png)
[英]Java : Set time part of java.SQL.Timestamp without changing the date
[英]Set date and time in java.sql.Timestamp
请告诉我如何使用这种结构设置日期(当前日期减去一天)和等于 19:00:00 的时间?
new java.sql.Timestamp(java.util.Calendar.getInstance.getTime().getTime())
LocalDateTime 不要使用。
我建议您使用java.time
(现代日期时间 API)来执行此操作。
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
OffsetDateTime odt = ZonedDateTime.now(ZoneId.systemDefault())
.minusDays(1)
.with(LocalTime.of(19, 0))
.toOffsetDateTime();
System.out.println(odt);
}
}
Output:
2020-12-24T19:00Z
您可以在 JDBC 代码中使用OffsetDateTime
,如下所示:
PreparedStatement st = conn.prepareStatement("INSERT INTO mytable (columnfoo) VALUES (?)");
st.setObject(1, odt);
st.executeUpdate();
st.close();
但是,如果您仍想使用java.sql.Timestamp
,您可以将ZonedDateTime
与适用的时区一起使用以获取所需的日期时间,然后将其转换为Instant
从中可以获得 Epoch 毫秒。 最后,您可以使用 Epoch 毫秒来构造java.sql.Timestamp
的实例。
import java.sql.Timestamp;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault())
.minusDays(1)
.with(LocalTime.of(19, 0));
Timestamp timestamp = new Timestamp(zdt.toInstant().toEpochMilli());
System.out.println(timestamp);
}
}
Output:
2020-12-24 19:00:00.0
笔记:
ZoneId.systemDefault()
。 将其更改为适用的时区,例如ZoneId.of("Europe/London")
。Instant
属于现代日期时间 API 。 从Trail: Date Time了解现代日期时间 API。import java.sql.Timestamp;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -1);
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
System.out.println(timestamp);
}
}
Output:
2020-12-24 19:00:00.0
这是我的代码
使用Calendar.add(Calendar.DAY_OF_YEAR, -1)
将日期设置为昨天
比较小时与Calendar.get(Calendar.HOUR_OF_DAY)
getHour
of java.sql.Timestamp 已弃用。
替换为Calendar.get(Calendar.HOUR_OF_DAY)
。
import java.sql.Timestamp;
import java.util.Calendar;
Calendar calendar = Calendar.getInstance(); // 2020-12-25 19:42:57.739
calendar.add(Calendar.DAY_OF_YEAR, -1);
Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
System.out.println(timestamp); // 2020-12-24 19:42:57.739
System.out.println(19 == calendar.get(Calendar.HOUR_OF_DAY)); // true
再见!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.