繁体   English   中英

在java.sql.Timestamp中设置日期时间

[英]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)来执行此操作。

解决方案,纯粹使用现代 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

笔记:

  1. 我使用了使用 JVM 时区的ZoneId.systemDefault() 将其更改为适用的时区,例如ZoneId.of("Europe/London")
  2. Instant属于现代日期时间 API Trail: Date Time了解现代日期时间 API。
  3. 出于任何原因,如果您必须坚持Java 6或Java 7 7,您可以使用Threeten- backport,它可以返回java8888.TIME功能的大部分功能。仍然不符合 Java-8,检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

解决方案,纯粹使用遗留的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM