我最近从日历切换到joda time LocalDate,以避免项目中的时区问题(我不需要时区)。在某个时候,我需要从LocalDate获得时间戳:
class DateTimeUtils{
static Timestamp getDeadline(LocalDate localDate, int daysToAdd){
localDate = localDate.plusDays(daysToAdd);
System.out.println(localDate);//This prints 2017-06-02
return new Timestamp(localDate.toDateTimeAtStartOfDay().getMillis());
}
public static void main(String... args){
LocalDate localDate= new LocalDate(2017,5,31);
Timestamp timeStamp=getDeadline(localDate,2);
System.out.println(timeStamp);//This prints 2017-06-01 23:00:00.0
}
}
由于某种原因,我无法理解,在将localdate转换为时间戳后,结果会返回到前一天的23:00。为什么?
您是否尝试过使用新的Java8日期时间API?它允许轻松地与java等遗留类进行互操作。sql。时间戳
。下面的代码给出了JDK 8java的预期结果。时间
课程。
public class DateTimeUtils {
static Timestamp getDeadline(LocalDate localDate, int daysToAdd) {
localDate = localDate.plusDays(daysToAdd);
return Timestamp.valueOf(localDate.atStartOfDay());
}
public static void main(String... args) {
LocalDate localDate = LocalDate.of(2017, 5, 31);
Timestamp timestamp = getDeadline(localDate, 2);
System.out.println(timestamp);// This prints 2017-06-02 00:00:00.0
}
}
在我的项目中避免时区问题
你不能忽视时区问题。一厢情愿的梦想。勇敢一点,抓住牛角,接受挑战,学会应对时区。你的编程工作会容易得多。
在对ToDateTimeAtStarToDay
的调用中,您选择忽略时区的参数,DateTimeZone
对象。因此,在运行时,JVM当前的默认时区被隐式应用。
然后转换成java。sql。时间戳(显然,您没有明确说明软件包),始终使用UTC。
您没有提供运行时当前的默认时区,因此我无法更准确地描述细节。
Joda-Time项目现在处于维护模式,其团队建议迁移到java.time类。这两个项目都是由同一个人斯蒂芬·科尔伯恩领导的,所以他们有着相同的概念方法。很容易切换。
若要获取今天的日期,请指定时区。在任何给定的时刻,日期都因地区而异。
查看我们如何在StarTofDay将区域传递到。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z );
LocalDate twoDaysLater = today.plusDays( 2 ) ;
ZonedDateTime zdt = twoDaysLater.atStartOfDay( z ) ;
Instant instant = zdt.toInstant(); // Instant is always in UTC by definition.
使用JDBC 4.2及更高版本,您可以直接使用java。时间类型。调用PreparedStatement。setObject
和结果集。getObject
。
爪哇。时间框架内置于Java8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,比如java。util。日期
,日历
,
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310。
你可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,也不需要java。sql*
类。
在哪里获得java.time类?
JavaSE8、JavaSE9及更高版本
- 内置的
- 标准Java API的一部分,带有捆绑实现
- Java9增加了一些小功能和修复
- java的大部分内容。时间功能被重新移植到Java 6
- 更高版本的Android捆绑包实现了java。时间课
额外的Three Ten项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如Interval
,YearWeek
,YearQuarter
,等等。
问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我想转换格式的时间戳记,并把它变成像用PHP。 我找到了一个有用的脚本来执行此操作,但是我认为它正在寻找一种不同的格式用作时间变量。我要修改以使用此格式的脚本是: 我认为在脚本的前几行中,脚本正在尝试执行以下操作(不同的日期格式数学): 我如何将时间戳转换为该(unix?
但不是LocalDate到DateTime
我尝试了convert_timezone('CET',current_timestamp)函数,但它在AWS Athena中不被识别 在更简单的工作中,我在Presto中寻找SQL Server函数GETUTCDATE()的替代品,只是希望获得CET时间戳。有什么建议吗?
问题内容: 我有一个表,该表在sqlite3中有一个带有时间戳的列。默认为,这样当插入行时,将插入当前时间。现在,我试图获取两天或更早之前插入的行。我想知道这是否有意义。 阅读我想到的文档: 但是显然那是错误的。我提出此查询,是因为它类似于我在实际代码中进行测试的方式: 。 但是我希望sqlite3包含一些针对这种情况的内置检查。 谢谢,我感谢您的任何答复。 编辑 :弄清楚了: 如果有人能提出更好
问题内容: 我将时间作为Unix时间戳存储在MySQL数据库中,并将其发送到一些JavaScript代码。我怎么会得到时间呢? 例如,以HH / MM / SS格式。 问题答案: let unix_timestamp = 1549312452 有关Date对象的更多信息,请参考MDN或ECMAScript5规范。
我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案