java - 日期操作和 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';
解决方案
对于第二个问题
如果您将开始和结束列作为日期时间并希望确保 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
推荐阅读
- java - Java - 使静态嵌套类对所有人可见,但仅由父类和父类的子类构造
- html - 电子书阅读器未捕获 epub 文件的嵌入字体
- android - 通过 1 Android Studio 更新 Firebase 中的数据字段
- c - Coverity 用于简单的 HalloWorld
- powerapps - Power Apps - 重置表单字段
- matlab - 如何绘制二进制数据的 BER 与 SNR 曲线
- c# - LINQ 在 SQL 语句中生成额外的 IS NULL 条件
- ruby-on-rails - Rails API,Cloudinary:未初始化的常量 CLOUDINARY_CLOUD_NAME (NameError)
- sapui5 - 动态设置值时刷新控件
- c# - 实体框架与 OrderBy 不同