Java 将字符串解析为7位小数的时间戳,日期时间格式
我试图解析字符串并将其更改为时间戳。但是,我还没有找到正确的日期时间格式。正在传递的时间字符串如下所示:Java 将字符串解析为7位小数的时间戳,日期时间格式,java,scala,datetime,simpledateformat,Java,Scala,Datetime,Simpledateformat,我试图解析字符串并将其更改为时间戳。但是,我还没有找到正确的日期时间格式。正在传递的时间字符串如下所示: 2020-07-23T02:46:04.0978382ZSimpleDataFormat的格式与此字符串不完全匹配。我用过的最接近的一个,以分钟和秒的速度完成,这似乎不正确 我尝试了以下格式。格式化,然后format6解析它,但时间戳已完全关闭: def timestampTest() :Unit ={ val timestampString = "2020-07-23
2020-07-23T02:46:04.0978382Z
SimpleDataFormat的格式与此字符串不完全匹配。我用过的最接近的一个,以分钟和秒的速度完成,这似乎不正确
我尝试了以下格式。格式化,然后format6解析它,但时间戳已完全关闭:
def timestampTest() :Unit ={
val timestampString = "2020-07-23T02:46:04.0978382Z" // from actual event
val format = "yyyy-MM-dd'T'HH:mm:ss.SSS" // parses but makes it off by seconds, min, hour: 2020-07-23 03:02:22.382
val format1= "yyyy-MM-dd'T'HH:mm:ss.SSSZ" // Cant parse
val format2= "yyyy-MM-dd'T'HH:mm:ss.SSSX" // cant parse
val format3= "yyyy-MM-dd'T'HH:mm:ss.SSSXX" // cant parse
val format4 = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" // cant parse
val format5 = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ" // cant parse
val format6 = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"// Time is off: 2020-07-23 03:02:22.382
val dateFormat = new SimpleDateFormat(format)
val x = new Timestamp(dateFormat.parse(timestampString).getTime)
println(timestampString)
println(x)
}
是否有支持此类字符串的日期时间格式?或者它看起来像是我收到的字符串将被调整/修剪
是否有支持此类字符串的日期时间格式
是的,默认情况下,您可以使用或来解析问题的日期-时间字符串格式(即,不显式使用任何格式)
输出:
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23 02:46:04.0978382
我建议您从过时且容易出错的遗留日期时间API切换到
使用SimpleDataFormat
有什么问题?
SimpleDataFormat
不支持纳秒。它最多只支持毫秒,这就是为什么在输出中关闭时间的原因
我可以直接在JDBC中使用OffsetDateTime
?
当然可以。查看更多信息。下面是相同的屏幕截图(以防将来链接中断):
我可以从OffsetDateTime
获取时间戳吗?
是的,您可以(如下所示),但我不建议这样做,因为它继承了设计糟糕的java.util.Date
。如前所述,您可以直接在JDBC中使用OffsetDateTime
,您应该坚持使用现代的日期时间API
import java.sql.Timestamp;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.parse("2020-07-23T02:46:04.0978382Z");
System.out.println(odt);
Timestamp ts = Timestamp.valueOf(odt.atZoneSameInstant(ZoneOffset.UTC).toLocalDateTime());
System.out.println(ts);
}
}
输出:
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23T02:46:04.097838200Z
2020-07-23 02:46:04.0978382