我有一个String
变量,我想把它变成long
变量。
String dtStart = "2018-04-25 20:09:55";
Date date = null;
long dateLong = 0;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
date = format.parse(dtStart);
dateLong = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
变量dtStart
改变了值,它显示dateLong = 0
,我希望将此变量转换为long
中的dateLong
变量
此外,我可以将dtStartd
变成"2010-10-15T09:27:37Z"
这种格式,但我不知道如何。
答案 0 :(得分:1)
LocalDateTime.parse( // Parse string as a `LocalDateTime`. Lacking any time zone or offset-from-UTC means this is *not* a moment, *not* a point on the timeline.
"2018-04-25 20:09:55".replace( " " , "T" ) // Alter input to comply with ISO 8601 standard format, used by default in the *java.time* classes.
) // Returns a `LocalDateTime` object.
.atZone( // Give context and meaning to our `LocalDateTime`, to determine a point on the timeline.
ZoneId.of( "America/Montreal" ) // Always specify time zone using proper `Continent/Region` format, never 3-4 letter pseudo-zones such as `PST`, `CST`, `IST`.
) // Returns a `ZonedDateTime` object.
.toInstant() // 2018-04-26T00:09:55Z. Extract a UTC value, `Instant` object, from the `ZonedDateTime`.
.toEpochMilli() // Ask for count of milliseconds from 1970-01-01T00:00Z to this moment.
1524701395000
更改字符串输入以符合ISO 8601标准。
String input = "2018-04-25 20:09:55".replace( " " , "T" ) ;
2018-04-25 20:09:55
解析。
LocalDateTime ldt = LocalDateTime.parse( input ) ;
ldt.toString():2018-04-25T20:09:55
使用ZoneId
应用预期时区,以获得ZonedDateTime
。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ldt.atZone( z ) ;
zdt.toString():2018-04-25T20:09:55-04:00 [美国/蒙特利尔]
以UTC格式提取值Instant
。
Instant instant = zdt.toInstant();
instant.toString():2018-04-26T00:09:55Z
获取1970年UTC 1970-01-01T00:00Z的第一个时刻以来的毫秒数。
long millis = instant.toEpochMilli() ;
1524701395000
如果该输入字符串用于UTC而不是时区(您的问题在这方面不明确),请使用与上述相同的提示,但切换到OffsetDateTime
和ZoneOffset
到位ZonedDateTime
和ZoneId
。
LocalDateTime.parse(
"2018-04-25 20:09:55".replace( " " , "T" )
)
.atOffset(
ZoneOffset.UTC // Using `ZoneOffset` rather than `ZoneId`. For UTC, we have the constant `ZoneOffset.UTC`.
) // Returns an `OffsetDateTime` object.
.toInstant() // 2018-04-25T20:09:55Z
.toEpochMilli()
请注意,我们得到的结果与上述不同,因为UTC的晚上8点与蒙特利尔魁北克的晚上8点不同。
1524686995000
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。