时间戳转换

时间:2019-11-05 06:52:08

标签: java apache-spark timestamp

我的below函数没有将日期转换为定义的格式。

  val oldFormat= new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS")
  val newFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSS",Locale.ENGLISH)
  newFormat.format(oldFormat.parse(s).getTime))

输入日期的格式为yyyy-MM-dd-HH.mm.ss.SSSSSS,需要将其转换为yyyy-MM-dd hh:mm:ss.SSSSSS。

我的输入是2019-10-08-03.57.1​​4.694695,但上述代码输出到2019-10-08 04:15:04.000695 我在这里做错了什么

3 个答案:

答案 0 :(得分:1)

使用Java 8中引入的更新的DatetimeFormatterLocalDateTime API:

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.*


fun main(args: Array<String>){

    val oldFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS")
    val localDateTime = LocalDateTime.parse("2019-10-08-03.57.14.694695", oldFormatter)
    val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS", Locale.ENGLISH)
    val output = formatter.format(localDateTime)
    println(output)

}

我创建了一个自定义格式化程序,并获取了date对象,然后使用其他自定义格式化程序重新格式化了该对象。

答案 1 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html。 S-毫秒,表示最大值为999。如果您将S写入3倍以上,则只会加上前导零。

但是您可以使用java.time,其中S是第二部分:

    final String input = "2019-10-08-03.57.14.694695";
    final TemporalAccessor ta = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS").parse(input);
    final DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss.SSSSSS", Locale.ENGLISH);
    final String result = newFormatter.format(ta);

答案 2 :(得分:0)

使用Java 8

String InputFormat = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String outputFormat = "yyyy-MM-dd HH:mm:ss.SSSSSS";

String input = "2019-10-08-03.57.14.694695";

LocalDateTime ldt = LocalDateTime.parse(input, DateTimeFormatter.ofPattern(InputFormat));

String result = DateTimeFormatter.ofPattern(outputFormat).format(ldt);
System.out.println(result);

如果您仍然想使用SimpleDateFormat,请使用@tutejszy答案通过以下方法解决问题

String input = "2019-10-08-03.57.14.694695";

String microseconds = input.substring(input.lastIndexOf('.')+1);
int ms= Integer.parseInt(microseconds);

input= input.substring(0,input.lastIndexOf('.')+1) + "000000";

SimpleDateFormat in = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS");

String result = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss.").format(in.parse(input))
+ String.format("%06d", ms%1000000);

System.out.println(result);