我必须触发一个SQL查询,它将相应时区的昨天午夜和今天午夜作为输入。是否有办法实现此目的?作为我的需求的一部分,生成Java中不同时区的报告
0
A
回答
0
只需在每个小时运行的cronjob,并产生只在时区刚刚结束
1
使用ZonedDateTime当天的报告:
String DATE_FORMAT = "dd-M-yyyy hh:mm:ss a";
String dateInString = "22-1-2015 10:15:55 AM";
LocalDateTime ldt = LocalDateTime.parse(dateInString, DateTimeFormatter.ofPattern(DATE_FORMAT));
ZoneId singaporeZoneId = ZoneId.of("Asia/Singapore");
System.out.println("TimeZone : " + singaporeZoneId);
//LocalDateTime + ZoneId = ZonedDateTime
ZonedDateTime asiaZonedDateTime = ldt.atZone(singaporeZoneId);
System.out.println("Date (Singapore) : " + asiaZonedDateTime);
ZoneId newYokZoneId = ZoneId.of("America/New_York");
System.out.println("TimeZone : " + newYokZoneId);
ZonedDateTime nyDateTime = asiaZonedDateTime.withZoneSameInstant(newYokZoneId);
System.out.println("Date (New York) : " + nyDateTime);
DateTimeFormatter format = DateTimeFormatter.ofPattern(DATE_FORMAT);
System.out.println("\n---DateTimeFormatter---");
System.out.println("Date (Singapore) : " + format.format(asiaZonedDateTime));
System.out.println("Date (New York) : " + format.format(nyDateTime));
输出是:
TimeZone : Asia/Singapore
Date (Singapore) : 2015-01-22T10:15:55+08:00[Asia/Singapore]
TimeZone : America/New_York
Date (New York) : 2015-01-21T21:15:55-05:00[America/New_York]
---DateTimeFormatter---
Date (Singapore) : 22-1-2015 10:15:55 AM
Date (New York) : 21-1-2015 09:15:55 PM
使用方法从这里得到你需要的东西
0
java.time
使用兼容JDBC 4.2或更高版本的驱动程序,Java的8或更高版本上运行,从使用该取代麻烦的旧的遗留日期时间类的现代java.time类受益。
确定“今天”和“昨天”意味着确定日期。确定一个日期需要一个时区。对于任何特定的时刻,日期因地区而异。
ZoneId z = ZoneId.of("America/Montreal") ;
LocalDate today = LocalDate.now(z) ;
LocalDate yesterday = today.minusDays(1) ;
要查询数据库中的时间戳,我们需要特定的时刻。该问题指定午夜。术语“午夜”是模糊的。让我们用“一天中的第一时刻”来代替。
永不假设一天从00:00:00开始。夏令时(DST)等异常意味着它可能从另一个时间点开始,如01:00:00。让java.time确定一天中的第一个时刻。
ZonedDateTime start = yesterday.atStartOfDay(z) ;
一般来说,为了确定时间跨度最好的办法是,虽然半开的方法,即最开始是包容而结局是独家。所以我们希望在一天的第一时间开始,并跑到下一个一天的第一时刻,但不包括。
ZonedDateTime stop = today.atStartOfDay(z) ;
半打开,我们做不使用SQL命令BETWEEN
。
SQL
SELECT * FROM t
WHERE event >= ? AND event < ? ;
的Java
myPreparedStatement.setObject(1 , start) ;
myPreparedStatement.setObject(2 , stop) ;
要检索的时间戳,使用getObject
。
Instant instant = myResultSet.getObject("event" , Instant.class) ;
要从UTC移到区域,请应用ZoneId
。
ZonedDateTime zdt = instant.atZone(z) ;
相关问题
- 1. Birt为同一报告生成不同的PDF格式
- 2. 报告生成报告所需的最长时间
- 3. Java报告生成
- 4. Junit的报告不会生成报告
- 5. SSRS。报告中的一行中的组2不同部分
- 6. 生成报告时phpexcel中的错误
- 7. Git中的报告生成
- 8. Java - 生成复杂的excel报告
- 9. 一个报告中的多个部分
- 10. Surefire报告不生成报告
- 11. Birt报告 - 不生成空白报告
- 12. 查看报告服务报告作为不同的AD用户
- 13. JMeter 3.0报告生成 - 为什么我的报告仪表板为空?
- 14. 在Java中生成分区
- 15. 发送XML作为URL中的Java请求的一部分
- 16. SSRS为接受的多个值生成相同的报告作为参数
- 17. 女士访问和PDF作为报告的一部分
- 18. SSRS:设置报告参数作为查询的一部分
- 19. 如何在Java中生成报告?
- 20. 在java中生成HTML报告
- 21. 代理TFS的生成时间报告
- 22. 生成按日期和部门分组的报告mysql
- 23. 如何生成报告的GridView为PDF
- 24. 报告生成
- 25. 报告生成
- 26. 生成报告
- 27. 生成报告
- 28. 生成HTML TestNG的报告
- 29. 当我试图通过批处理文件生成报告时,为什么我无法生成报告?
- 30. 不同的报告在生成的报告中获得相同的图表图像
“各自的时区”是什么意思?谁的时区?你的问题不清楚。 –