我在将一个整数日期(20180525)转换为YYYY-MM-DD格式的日期时遇到了问题。有没有办法做到这一点,或者我应该在代码中进行转换(在这种情况下是Java)?非常感谢您对此的任何帮助。谢谢!
我在将一个整数日期(20180525)转换为YYYY-MM-DD格式的日期时遇到了问题。有没有办法做到这一点,或者我应该在代码中进行转换(在这种情况下是Java)?非常感谢您对此的任何帮助。谢谢!
如果您的日期以YYYYMMDD形式存储为整数,则可以先将其转换为TEXT
,然后将其传递给日期函数。
SELECT date(20180525::TEXT)
否则,使用函数to_date和日期格式化程序:
SELECT to_date(20180525::text, 'YYYYMMDD')
SQL或Java都可以。对于SQL,请参考Ali的正确答案。
对于Java,请将LocalDate
传递给PreparedStatement
查询。
LocalDate.parse( // `LocalDate` represents a date-only value without time-of-day and without time zone. Works with SQL-standard `DATE` type.
Integer.toString( 20180525 ) , // Convert integer to text, for a `String` object as input.
DateTimeFormatter.BASIC_ISO_DATE // Specify a formatting pattern to match our input string.
) // Returns a `LocalDate` object.
2018-05-25
关于Java中提到的问题,下面是使用现代的java.time类的代码。你应该使用SQL还是Java来解析字符串取决于你的情况和个人喜好,两种方法都可以。
LocalDate
LocalDate
类表示一个仅包含日期而不包含时间和时区的值。
你需要指定一个格式化模式以匹配你的输入。在这种特殊情况下,你的输��字符串是标准的ISO 8601格式。具体来说,是最小化使用分隔符的ISO 8601格式的“basic”变体。在java.time中,你可以方便地找到预定义的特定格式化模式。
String input = Integer.toString( 20180525 ) ; // Convert integer to text for input as `String`.
DateTimeFormatter f = DateTimeFormatter.BASIC_ISO_DATE ;
LocalDate ld = LocalDate.parse( input , f ) ;
ld.toString(): 2018-05-25
从JDBC 4.2版本开始,您可以直接使用java.time对象与数据库进行交互。使用智能对象而不是愚蠢的字符串总是更好的选择。
String sql = "SELECT event_date FROM tbl WHERE event_date = ? ; " ;
…
myPreparedStatement.setObject( 1 , ld ) ;
检索和获取。
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Java.time框架内置于Java 8及更高版本中。这些类替代了老旧的遗留日期时间类,例如java.util.Date
、Calendar
和SimpleDateFormat
。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程,也可以在Stack Overflow上搜索许多示例和解释。规范是JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。无需字符串,无需java.sql.*
类。
如何获取java.time类?
Java SE 8、Java SE 9、Java SE 10及其后续版本:ThreeTen-Extra 项目扩展了 java.time 的附加类。该项目是 java.time 可能未来增加的一个试验场。您可能会在这里找到一些有用的类,例如 Interval
、YearWeek
、YearQuarter
等等。更多详细信息请参见此处。
String sql
行。 - Basil Bourqueselect ((field_int)::text)::date as field_date from your_table;
to_timestamp(timestamp_int)::date
,但这确实是我在这个标题/问题下期望找到的。20180525
的解释表明世界充满了令人难以置信的想法。