Ada*_*ter 149
通过Timestamp,我认为你的意思java.sql.Timestamp.您会注意到此类有一个接受long参数的构造函数.您可以使用DateFormat类解析它:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
Run Code Online (Sandbox Code Playgroud)
pig*_*ina 115
那这个呢?
java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 17
什么是时间戳?如果你的意思是自Unix时代以来毫秒:
GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)
如果你想要一个实际的java.sql.Timestamp对象:
Timestamp ts = new Timestamp(millis);
Run Code Online (Sandbox Code Playgroud)
Bas*_*que 10
java.sql.Timestamp.from (
LocalDate.of ( 2007 , 9 , 23 )
.asStartOfDay( ZoneId.of ( "America/Montreal" ) )
.toInstant()
)
Run Code Online (Sandbox Code Playgroud)
让我们通过使用Java 8及更高版本中内置的java.time框架显示代码来更新此页面.
这些新类的灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展.他们取代了早期版本的Java捆绑的臭名昭着的旧日期时间类.
在java.time中,a Instant是UTC时间轴上的一个时刻.A ZonedDateTime是瞬间调整为时区(ZoneId).
时区在这里至关重要.如果September 23, 2007不应用时区,则无法将日期转换为时间轴上的某个时刻.考虑到巴黎早些时候的新的一天比蒙特利尔还要"新的一天"还要"昨天".
此外,java.sql.Timestamp表示日期和时间.因此,我们必须注入一个时间来与日期一起.我们假设您希望将当天的第一时刻作为时间.请注意,00:00:00.0由于夏令时和可能的其他异常,这并不总是时间.
请注意,与旧的java.util.Date类不同,与Joda-Time不同,java.time类型的分辨率为纳秒而不是毫秒.这与java.sql.Timestamp的分辨率匹配.
请注意,java.sql.Timestamp有一个讨厌的习惯,即在通过其toString方法生成字符串表示时,将JVM的当前默认时区隐式应用于其日期时间值.在这里,您可以看到我的America/Los_Angeles时区已应用 相比之下,使用标准的ISO 8601格式,java.time类更加清晰.
LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.asStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
java.sql.Timestamp ts = java.sql.Timestamp.from ( instant ) ;
Run Code Online (Sandbox Code Playgroud)
转储到控制台.
System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );
Run Code Online (Sandbox Code Playgroud)
跑步时
d:2007-09-23 = zdt:2007-09-23T00:00-04:00 [美国/蒙特利尔] =即时:2007-09-23T04:00:00Z = ts:2007-09-22 21:00: 00.0
顺便说一句,从JDBC 4.2开始,您可以直接使用java.time类型.没必要java.sql.Timestamp.
PreparedStatement.setObjectResultSet.getObject该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类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
您还可以执行以下操作:
// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());
Run Code Online (Sandbox Code Playgroud)