如何模拟以下代码?我不想更改代码。
Date date = new Date();
String res_timestamp=new Timestamp(date.getTime()).toString();
我的代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("PST"));
Date NOW = sdf.parse("2019-02-11 00:00:00");
Timestamp time=new Timestamp(NOW.getTime());
whenNew(Timestamp.class).withNoArguments().thenReturn(time);
我怎么能嘲笑它呢?我发现很难嘲笑它。
我该怎么解决呢?
注意:我不想更改我的代码。在不改变代码的情况下,我不得不模仿这两行代码。
java.time.时钟
,ZonedDateTime
,Instant
,ZoneId
。时钟
对象作为依赖项注入:Clock.fixed(...)
。Date
、Calendar
、SimpleDateFormat
、Timestamp
、TimeZone
。您使用的日期时间类非常糟糕,多年前已经被java取代。JSR 310定义的时间类。
java.time.时钟
类提供了几种适合测试的替代行为。其中包括固定时间点、更改的节奏和从当前时刻进行调整。
将这些时钟
对象之一传递给java.time类中的各种方法,以供您进行测试。
PST
不是时区。以大陆/地区
的格式指定适当的时区名称,例如美国/蒙特利尔
,非洲/卡萨布兰卡
,或太平洋/奥克兰
。切勿使用2-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不标准化,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
建立你心中测试的特定时刻。
LocalDate ld = LocalDate.of( 2019 , 2 , 11 ) ;
LocalTime lt = LocalTime.MIN ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
zdt.toString(): 2019-02-11T00:00-08:00[America/Los_Angeles]
呼叫时钟。固定的
需要一个瞬间
,一个UTC时刻。我们可以通过提取一个即时
,将分区值调整为UTC。同一时刻,时间线上的同一点,不同的挂钟时间。
Instant instant = zdt.toInstant() ;
瞬间toString():2019-02-11T08:00:00Z
指定一个时钟
,它将当前时刻永远报告为该特定时刻,而不递增。
Clock clock = Clock.fixed( instant , z ) ;
clock.toString():固定时钟[2019-02-11T08:00:00Z, America/Los_Angeles]
将固定时钟作为依赖项注入。
Instant now = Instant.now( clock ) ; // Tell me a lie.
now.toString(): 2019-02-11T08:00:00Z
查看此代码在IdeOne上的实时运行。通用域名格式。
如果您正在实例化java。sql。时间戳
要与数据库一起使用,请使用java。时间课。从JDBC 4.2开始,我们可以交换java。数据库中的时间对象。
您的JDBC驱动程序可能对Instant
有可选的支持。
myPreparedStatement.setObject( … , instant ) ; // Storing data.
Instant instant = myResultSet.get( … , Instant.class ) ; // Retrieving data.
您的驱动程序必须支持OffsetDateTime
。
myPreparedStatement.setObject( … , instant.atOffset( ZoneOffset.UTC ) ) ; // Storing data.
OffsetDateTime odt = myResultSet.get( … , OffsetDateTime.class ) ; // Retrieving data.
调整到一个时区。
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
java.time框架内置在Java8及更高版本中。这些类取代了麻烦的旧的遗留日期-时间类,例如java.util.Date
,Calendar
,
Joda Time项目现在处于维护模式,建议迁移到java。时间课。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
你可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,也不需要java。sql*
类。
从哪里获得java.time课程?
JavaSE 8、JavaSE 9、JavaSE 10、JavaSE 11及更高版本-标准JavaAPI的一部分,具有捆绑实现。
- Java9增加了一些小功能和修复。
- 大部分的java应用程序。时间功能被重新移植到Java 6
- 更高版本的Android捆绑包实现了java。时间课
- 对于早期的Android系统(
额外的Three Ten项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,等等。
问题内容: 我在来自Linux服务器的json中有一个时间戳。我想使用Java将其转换为简单的日期时间格式。 我需要以下格式的日期和时间:dd-mm-yyyy hh:mm:ss 这是我的JSON数据: 问题答案: 批处理日期 看起来像是从时代开始的几秒钟, 所以 然后使用SimpleDateFormat应该可以解决问题 -代码- -输出-
在Java中获取计数后,如何将“时间戳”转换为? 我目前的代码如下: 这里我得到的输出是2012-08-07 0,但是等效查询返回3。为什么我得到0?
问题内容: 在Java应用程序中,使用日期时间和时间戳的混合在MySQL数据库中添加和输入日期信息方面有什么好的折衷办法? 问题答案: 在Java方面,日期通常由(设计欠佳,但不包括在内)表示。它基本上是由支持大纪元时间中的味道long,也称为时间戳。它包含有关日期和时间部分的信息。在Java中,精度以毫秒为单位。 在SQL方面,有几个标准的日期和时间类型,DATE,TIME和TIMESTAMP(
问题内容: 论坛成员 我在Java中遇到日期时间问题。实际上,我正在接收 格式为2012-02-27T01:10:10 的开始日期,并且我想将接收到的日期插入具有datetime数据类型的数据库中。 实际上,我尝试通过以下代码将收到的开始日期转换为日期时间 但是使用上面的代码,只有 日期被添加到我的数据库中,例如2012-02-27 00:00:00 我也想将时间添加到数据库中,但是当我将Simp
然后将变量持久化到MySQL表列中。 然而,虽然通过调试,我看到对象显示在正确的时区GMT+1,但在数据库上持久化时,它是一个GMT时区,所以要追溯一个小时。 使用函数返回一个GMT+1日期。 连接字符串为,没有任何参数。 编辑:找到这段代码
问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期是太平洋标准时间(PST)2018-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下,530pm是UTC 530pm。显示时,它将被格式