我有这个日期格式来自Twitter API:Wed Oct 11 17:30:20 CEST 2017
在Java SQL中,我需要这种日期格式:2017-10-11 17:30:20
如何转换日期格式以便可以插入数据库?
这是我的代码:
Date createdAt = message.getCreatedAt();
答案 0 :(得分:2)
好吧,似乎java.util.Date
方法返回一个java.sql.Date
对象,所以如果你需要实例化一个Date createdAt = message.getCreatedAt();
java.sql.Date sqlCreatedAt = new java.sql.Date(createdAt.getTime())
实例来保存你的数据库,你可以简单地这样做:
$data=Project::where('pid', 35)->get();
$eve=Event::where('pro_id', 35)->get();
$don=Donation::where('pro_id', 35)->get();
$opp=Opportunity::where('pro_id', 35)->get();
return view('other.detailedProject', compact('data', 'eve', 'don', 'opp'));
http://twitter4j.org/javadoc/twitter4j/Status.html#getCreatedAt--
答案 1 :(得分:0)
使用对象,而不是字符串。
myPreparedStatement.setObject(
… ,
ZonedDateTime.parse(
"Wed Oct 11 17:30:20 CEST 2017" ,
DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US )
).toInstant()
)
使用JDBC 4.2及更高版本,您可以直接与数据库交换 java.time 对象。 无需使用纯粹的字符串,也不需要麻烦的旧版旧日期时间类,例如java.sql.Date
/ java.sql.Timestamp
。
为输入定义格式设置模式。指定Locale
以指示翻译当天名称和月份名称所需的人类语言。
String input = "Wed Oct 11 17:30:20 CEST 2017";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
如果您的输入包含有关时区的提示,请将其解析为ZonedDateTime
。请注意,您的CEST
不实际上是一个时区,但ZonedDateTime
会猜测解释。这样的3-4个字母伪区域给出了关于时区的提示,但是没有标准化,甚至不是唯一的(!)。这与输入字符串的其余部分一起,是日期时间格式的可怕选择。只要有可能,请使用标准ISO 8601格式。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
通常最好以UTC工作。提取Instant
对象。 Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = zdt.toInstant() ;
通过支持JDBC 4.2或更高版本的JDBC driver将其传递到您的数据库。
myPreparedStatement.setObject( … , instant ) ;
检索:
Instant instant = myResultSet.getObject( … , Instant.class ) ;
如果您的数据库列的类型为TIMESTAMP WITHOUT TIME ZONE
而不是TIMESTAMP WITH TIME ZONE
,则使用LocalDateTime
对象而不是ZonedDateTime
/ Instant
。 LocalDateTime
对象缺少time zone或offset-from-UTC的任何概念。
LocalDateTime ldt = zdt.toLocalDateTime() ;
myPreparedStatement.setObject( … , ldt ) ;
java.util.Date
如果您的Twitter调用实际上返回了java.util.Date
对象而不是字符串,请转换为Instant并按照上述步骤进行测试。
Instant instant = myJavaUtilDate.toInstant() ; // Convert from troublesome legacy `Date` class to modern `Instant` class.
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。