首页 > 解决方案 > 日期操作和 SQL 日期时间 WHERE 查询

问题描述

所以我准备把我的车开下桥,真的需要外界对如何做到这一点的意见,我一直在努力寻找任何一种有效的解决方案,感觉好像这只是我压抑的压力我回来了。话虽如此,任何帮助表示赞赏。

前言:我的应用程序在 sql 数据库中处理客户,用户可以选择一个客户并将约会上传到另一个表。是的,这是家庭作业,是的,我试图自己解决它。我遇到了精神障碍,无法解决问题,这就是为什么我真的需要有人来提示我做错了什么。

我遇到严重心理障碍的地方是正确转换日期以及查询 SQL。我正在使用JavaFX 日期选择器,它以 'YYYY-MM-DD' 的形式返回 Date(),例如今天将是 '2018-25-11'。约会以 UTC 存储,这导致了我的第一个问题。

如果员工选择一个日期,例如 2018 年 12 月 1 日,则该日期需要转换为 UTC,并且需要从数据库中查询完整的 24 小时。

问题 1:所以我的想法是从上述形式的 datepicker 中获取 Date() 对象,然后将“00:00:00”添加到它并尝试转换为 UTC,但我不知道该怎么做找不到任何相关的东西,你会怎么做。我还需要在 '00:00:00' 转换明天的日期,以便我可以获得完整的可能 UTC 时间来查询

这是我对问题 1 的尝试和输出:

//I live in PST, which is UTC-8
test("2018-12-01");

private static void test(String date){
    try{
        DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date startDate = utcFormat.parse(date + " 00:00:00");
        System.out.println(startDate);

        LocalDateTime today = convertToLocalDateTimeViaSqlTimestamp(startDate);
        today = today.plusDays(1);

        System.out.println(convertToDateViaSqlTimestamp(today));
    }catch(Exception e){
        e.printStackTrace();
    }

}
private static Date convertToDateViaSqlTimestamp(LocalDateTime dateToConvert) {
    return java.sql.Timestamp.valueOf(dateToConvert);
}
private static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
    return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime();
}

输出

Fri Nov 30 16:00:00 PST 2018
2018-12-01 16:00:00.0

我重新阅读了我们的课程材料,上面没有任何内容。我已经联系/尝试在办公时间与我的教授见面,即使在他规定的时间内,他也从未有空。我有一个完整的工作程序,最后阻碍我的是我无法找到任何有用的解决方案。

问题 2:数据库保存一个开始业务时间,在 UTC 中为了简单起见说它的“00:00:00”并延长 8 小时,所以结束时间将是“08:00:00”,我如何返回所有约会条目假设开始/结束时间采用日期时间格式,则介于问题 2 的这些时间之间。

这是我对问题 2 所做的,我想知道这是否可以接受,因为我知道日期的确切格式将始终采用 'YYYY-MM-DD' 格式,或者它会在某些模糊的条件下失败?:

SELECT * FROM appointment WHERE start >= '2018-12-01 00:00:00' AND end < '2018-12-01 02:00:00';

标签: javamysqldatedatetime

解决方案


对于第二个问题

如果您将开始和结束列作为日期时间并希望确保 mysql 中的字符串值匹配可以使用 STR_TO_DATE 来构建正确的日期时间

例如,假设您的日期时间格式为 2018-12-01 00:00:00

你可以

SELECT * 
FROM appointment 
WHERE start >= str_to_date('2018-12-01 00:00:00', '%Y-%m-%d %T')  AND 
        end < str_to_date('2018-12-01 02:00:00',  '%Y-%m-%d %T');

对于第一个问题,yiu 可以查看
convert_tz() 函数,以便您可以使用查询完成所有工作

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz


推荐阅读