Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串解析为7位小数的时间戳,日期时间格式_Java_Scala_Datetime_Simpledateformat - Fatal编程技术网

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