Postgresql的Java常量';星期几
Postgresql使用Postgresql的Java常量';星期几,java,postgresql,dayofweek,Java,Postgresql,Dayofweek,Postgresql使用EXTRACT和dow以以下方式返回星期几:0是星期日,1是星期一,一直到6是星期六 我正在寻找一些正式的常量,或者是Java本身的常量,或者是JDBC常量,或者是一些标准库(ApacheCommons?)与此编号匹配。您可以使用日历常数减去1,这样您就可以匹配PostgreSQL值,即:日历.SUNDAY=1您可以使用日历常数减去1,这样您就可以根据您应该使用的相同值匹配PostgreSQL值,即:日历.SUNDAY=1isodow: 星期一(1)到星期日(7)根据同样
EXTRACT
和dow
以以下方式返回星期几:0是星期日,1是星期一,一直到6是星期六
我正在寻找一些正式的常量,或者是Java本身的常量,或者是JDBC常量,或者是一些标准库(ApacheCommons?)与此编号匹配。您可以使用
日历
常数减去1,这样您就可以匹配PostgreSQL值,即:日历.SUNDAY=1
您可以使用日历
常数减去1,这样您就可以根据您应该使用的相同值匹配PostgreSQL值,即:日历.SUNDAY=1
isodow
:
星期一(1)到星期日(7)根据同样的规则,您应该使用isodow:
星期一(1)至星期日(7)tl;博士
我正在寻找一些正式的常量,或者是Java本身
是的,Java使用与Postgres中的isodow
函数相同的标准ISO 8601定义在enum中定义每周七天的值,其中一周从周一到周日,天数为1-7
DayOfWeek.WEDNESDAY.getValue() // Returns an `int` 1-7 for Monday-Sunday.
三,
java.time.DayOfWeek
enum
正如建议的那样,使用
isodow
中的“iso”指的是标准,星期一至星期日的天数为1-7
Java在其枚举中支持相同的周定义。该类为您定义了七个对象,一周中的每一天一个,例如。要获取每个对象的星期几编号,周一至周日为1-7,请调用DayOfWeek::getValue
。但是在Java编码中,要关注使用和传递DayOfWeek
对象本身,而不仅仅是整数
int dowNumber = DayOfWeek.WEDNESDAY.getValue() ;
三,
从整数到DayOfWeek
对象有点棘手,因为我们需要使用索引访问Java数组。这个指数意味着以零为基础的计数,所以从你的周数中减去一。星期三是第3天,因此减去1得到2的结果,即可访问DayOfWeek.周三
DayOfWeek dow = DayOfWeek.values()[ 3-1 ] ; // Get object named `WEDNESDAY` using zero-based index counting, so 3 - 1 = 2.
道琼斯指数:星期三
顺便说一下,要自动本地化一周中某一天的名称,请调用
Java而不是SQL
我目前正在编写一个查询,查找目前在各自时区有星期五上午10:00的客户,因此我需要将“星期五”的概念传递到查询中,当然我不想硬编码
使用业界领先的Java.time类在Java中完成这项工作可能比使用SQL更好
你必须非常小心时区。明确时区,而不是依赖隐式默认区域
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”
如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好将所需/预期时区明确指定为参数
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)
如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,则隐式应用JVM的当前默认值。最好是显式的,因为JVM中任何应用程序的任何线程中的任何代码都可能在运行时的任何时刻更改默认值
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
下一个星期五,如果已经是星期五,就坚持今天。使用可在日期之间进行调整,特别是在中找到的日期
你说你的目标是上午10点
LocalTime lt = LocalTime.of( 10 , 0 ) ; // 10 AM.
结合日期和区域,获得特定时刻
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
通过提取即时
对象调整为UTC。同一时刻,时间线上的同一点,但不同的挂钟时间
Instant instant = zdt.toInstant() ;
制定SQL以查询带有时区的时间戳类型的数据库列
String sql = "SELECT * from tbl WHERE when_col = ? ; " ;
…
myPreparedStatement.setObject( … , instant ) ;
和检索
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
在这种方法中,您需要Postgres中的dow
或isodow
函数
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(tl;dr
我正在寻找一些正式的常量,或者是Java本身
是的,Java使用与Postgres中的
isodow
函数相同的标准ISO 8601定义在enum中定义每周七天的值,其中一周从周一到周日,天数为1-7
DayOfWeek.WEDNESDAY.getValue() // Returns an `int` 1-7 for Monday-Sunday.
三,
java.time.DayOfWeek
enum
正如建议的那样,使用
isodow
中的“iso”指的是标准,星期一至星期日的天数为1-7
Java在其枚举中支持相同的week定义。该类为您定义了七个对象,一周中的每一天定义一个对象,例如。以获取每个对象的da
Instant instant = myResultSet.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;