Time Java8中的解析(ss.nnn)秒和纳秒

Time Java8中的解析(ss.nnn)秒和纳秒,time,java-8,java-time,localtime,Time,Java 8,Java Time,Localtime,我试图解析秒和纳秒,即10.337000,在Java8中,10是秒,337000是纳秒。我不知道如何将这些值解析为LocalTime 我已经尝试了DateTimeFormatter.of模式(“ss:nnnnnn”),但没有成功。有几个选项 如果您的时间字符串表示时间量 对于持续时间而言,java中的duration类的时间量(以天、小时、分钟、秒和/或秒的分数为单位)。time是正确的使用时间: String timeString = "10.337000"; Duration

我试图解析秒和纳秒,即10.337000,在Java8中,10是秒,337000是纳秒。我不知道如何将这些值解析为
LocalTime


我已经尝试了DateTimeFormatter.of模式(“ss:nnnnnn”),但没有成功。

有几个选项

如果您的时间字符串表示时间量 对于持续时间而言,
java中的
duration
类的时间量(以天、小时、分钟、秒和/或秒的分数为单位)。time
是正确的使用时间:

    String timeString = "10.337000";
    Duration amountOfTime = Duration.parse("PT" + timeString + "S");
    System.out.println("Duration: " + amountOfTime);
    System.out.println("Seconds: " + amountOfTime.getSeconds());
    System.out.println("Nanos: " + amountOfTime.getNano());
这张照片

Duration: PT10.337S
Seconds: 10
Nanos: 337000000
我们得到了337000000纳秒。我假设这是正确的,因为每秒有100000000纳秒(百万分之一秒称为微秒)

Duration
类的解析和格式化功能有限。它解析ISO 8601格式,类似于
PT10.337000S
,因此我只需在字符串的前面和末尾添加正确的字母,就可以了。您可以看到
Duration.toString()
也会打印相同的格式(省略多余的0小数)

如果您的时间字符串表示一天中的某个时间
您要求提供
LocalTime
LocalTime
表示一天中的小时数,因此,如果您打算在午夜后10.337秒使用,这是正确的类。一个简单的选择是在一段时间内预加一个字符串以匹配ISO 8601格式,而不偏移UTC,类似于我在这段时间内所做的操作:

    LocalTime time = LocalTime.parse("00:00:" + timeString);
这将提供一个
LocalTime

00:00:10.337
同样,
toString()
只给出尽可能多的三个小数组,以呈现完整的精度

您提到使用了
日期时间格式化程序
,您可能希望坚持这个想法。这将允许您在一个地方构建一次格式化程序,并在代码中的其他地方使用它,而无需担心字符串的前置。我们需要告诉格式化程序将分钟和小时设置为0,为此,我们需要通过一个
DateTimeFormatterBuilder

    DateTimeFormatter timeParser = new DateTimeFormatterBuilder()
            .appendPattern("s.SSSSSS")
            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
            .toFormatter();
    LocalTime time = LocalTime.parse(timeString, timeParser);
这将给出与之前完全相同的结果,即00:00:10.337的
LocalTime


此代码段中的格式化程序要求秒数正好为6位小数(因为小数点后有6位大写字母
S
)。如果小数位数可能不同,则需要研究
DateTimeFormatterBuilder.appendFraction
方法。

A
LocalTime
表示一天中的时间,这是您想要的吗?午夜10点337分?另一方面,如果你有一个持续时间,一个时间量,
duration
类就是正确的选择。我想你的意思是10秒337000微秒?每秒有100000000纳秒,所以它们通常用9位小数来写