date操作和sql-datetime查询

icomxhvb  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(308)

所以我正准备把车开到桥下,真的需要外界的意见来解决这个问题,我已经挣扎了好几天,想找到任何有效的解决办法,感觉好像是所有压抑的压力在阻碍我。尽管如此,任何帮助都是非常感谢的。
前言:我的应用程序处理sql数据库中的客户,用户可以选择一个客户并将约会上载到另一个表。是的,这是家庭作业,是的,我试图自己解决它。我遇到了心理障碍,什么也做不到,这就是为什么我真的需要有人告诉我我做错了什么。
我遇到的严重心理障碍是正确地转换日期,以及查询sql。我使用的是javafx datepicker,它以“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”,假设开始/结束时间是datetime格式,我如何从问题2返回这些时间之间的所有约会条目。
下面是我对问题2所做的,我想知道这是否可以接受,因为我知道日期的确切格式始终是'yyyy-mm-dd'格式,还是在某些模糊的情况下失败?:

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

5cg8jx4n1#

关于第二个问题
如果您将start和end列设置为datetime,并且希望确保mysql中的字符串值匹配,那么可以使用str\u to\u date来构建适当的datetime
例如,假设您的日期时间格式为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');

对于第一个问题,姚可以看看
convert\u tz()函数,以便使用查询完成所有工作
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz公司

相关问题