我有以下应该返回时间戳的函数。当使用以下斜杠以字符串格式输入日期时,此代码有效:“2019/3/4”,但在使用new Date(年、月、日)时不正常工作。
import java.util.Date;
public static Long dateToTimestamp(Date date) {
return date == null ? null : date.getTime();
}
dateToTimestamp(new Date(2019, 3, 4) ---> 61512498000000 or, when converted, Friday, April 4, 3919 5:00:00 AM
怎么回事?
遵循Date方法的JavaDoc。它指出第一个参数年份的值应该是
年份减去1900
因此,调用dateToTimestamp方法的正确版本应该是
dateToTimestamp(新日期(119,3,4)
。
这将为您提供
1554316200000
。转换后的日期为2019年4月4日。
请注意,月份的值从1月的0开始,2月的1开始,依此类推。
如果您想获得UTC中显示的当天的第一个时刻,请将其转换为自1970-01-01T00:00Z以来的毫秒计数:
LocalDate // Represent a date, without time-of-day and without time zone.
.of( 2019 , 3 , 4 ) // Determine a date. Uses sane numbering, 1-12 for January-December.
.atStartOfDay( // Determine first moment of the day.
ZoneOffset.UTC // Get the first moment as seen at UTC (an offset of zero hours-minutes-days.
) // Returns a `ZonedDateTime` object.
.toInstant() // Convert from a `ZonedDateTime` to a simple `Instant` object, which is always in UTC, and has methods to get count-from-epoch.
.toEpochMilli() // Get a count of milliseconds since the epoch reference of first moment of 1970 to UTC.
您正在使用多年前被JSR 310中定义的现代java.time类所取代的可怕的日期时间类。
要获取自UTC中1970年第一个时刻的纪元引用1970-01-01T00:00Z以来的毫秒或整秒计数,请使用Instant
。
long millis = Instant.now().toEpochMilli() ;
或者:
long seconds = Instant.now().getEpochSecond() ;
对于约会,您必须确定该日期当天的第一个时刻。这并不总是00:00的时间,所以让java.time确定那个时刻。这样做需要一个时区。东方的一天比西方的一天开始得早,因时区而异。
LocalDate ld = LocalDate.of( 2019 , 3 , 4 ) ;
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
long millis = Instant.now().toEpochMilli() ;
爪哇。时间框架内置于Java8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,比如java。util。日期
,日历
,
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
你可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,也不需要java。sql*
类。
在哪里可以获得java。时间课?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本——标准JavaAPI的一部分,带有捆绑实现。
大部分的java应用程序。时间功能被重新移植到Java 6
更高版本的Android捆绑包实现了java。时间课
调用Date(int year,int month,int Date)
时,参数应如下所示:
@param year the year minus 1900.
@param month the month between 0-11.
@param date the day of the month between 1-31.
由于已弃用Date(int年、int月、int date)
,您可以使用Calendar
和设置
,如下所示来获取所需的日期
Calendar calendar = Calendar.getInstance()
calendar.set(2019, Calendar.MARCH, 4)
Long timeInMillis = calendar.timeInMillis
// timeInMillis should be 1551718624170 equivalent to Mon Mar 04 2019
我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案
问题内容: 我尝试将其转换为java.sql.Timestamp后插入,并使用以下代码段: 但是,这是给我的 有没有办法在没有毫秒的情况下获得输出? 问题答案: 您可以使用来减少毫秒数: 输出:
问题内容: 我有以下整数形式的时间戳 我可以使用SQL进行转换: 如何在Java中转换它?这样它将返回值: 问题答案: 假设自1970年1月1日以来的时间(以秒为单位)。你可以试试
问题内容: 我必须将linux时间戳转换为android日期。我从服务器获得此号码 我写了一个小代码段。 但这不能正确转换,这是我的结果 编辑 :通常我必须在这里 还有另一种获取正确日期的方法吗??? 问题答案: UNIX时间戳记应以毫秒为单位,因此将Long值乘以1000。因此,您的值1386889262将为1386889262000:
问题内容: 我在mysql数据库中有一个timestamp变量列。尝试将Carbon时间戳转换为我可以在此处输入的内容,但仅返回Carbon对象,当我尝试使用Carbon对象的时间戳字符串时,它未在mysql中注册。 我的第一个var dump就像这样: 我的第二个var dump就是这样。 与“ published_at”有关的mysql列是一个时间戳变量。我想如何将其从Carbon对象转换为?
问题内容: 我想将日期转换为时间戳,我的输入是。我用了 上面写着NaN ..有人能告诉你如何转换吗? 问题答案: var myDate = “26-02-2012”; myDate = myDate.split(“-“); var newDate = myDate[1]+”,”+myDate[0]+”,”+myDate[2]; console.log(new Date(newDate).getTi