简体   繁体   English

Java 将日期时间从“yyyy-MM-dd HH:mm:ss.SSSSSSS”转换为“yyyy-MM-dd HH:mm:ss.S”或从“yyyy-MM-dd HH:mm:ss.SSSSSSS”转换为“yyyy-MM-dd HH:mm:ss.SSS”

[英]Java convert DateTime from "yyyy-MM-dd HH:mm:ss.SSSSSSS" to "yyyy-MM-dd HH:mm:ss.S" or from "yyyy-MM-dd HH:mm:ss.SSSSSSS" to "yyyy-MM-dd HH:mm:ss.SSS"

Java 11 Java 11

I want to convert the date in "yyyy-MM-dd HH:mm:ss.SSSSSSS" to either "yyyy-MM-dd HH:mm:ss.S" or "yyyy-MM-dd HH:mm:ss.SSS" based on milliseconds value.我想将“yyyy-MM-dd HH:mm:ss.SSSSSSS”中的日期转换为“yyyy-MM-dd HH:mm:ss.S”或“yyyy-MM-dd HH:mm:ss”。 SSS”基于毫秒值。 If milliseconds are all zeros, then I just want single zero but if it is non-zero value then I want just value omitting trailing zeros.如果毫秒全为零,那么我只想要单个零,但如果它是非零值,那么我只想要省略尾随零的值。

Example:例子:

  1. Input: 2021-03-10 16:37:02.4230000 => Desired Output: 2021-03-10 16:37:02.423输入:2021-03-10 16:37:02.4230000 => 所需的 Output: 2021-03-10 16:37:02.423
  2. Input: 2021-03-10 16:39:51.0000000 => Desired output: 2021-03-10 16:39:51.0输入:2021-03-10 16:39:51.0000000 => 期望的 output: 2021-03-10 16:39:51.0
  3. Input: 2021-04-22 23:03:52.0234000 => Desired output: 2021-04-22 23:03:52.0234输入:2021-04-22 23:03:52.0234000 => 期望的 output: 2021-04-22 23:03:52.0234

So, I started out with something like...所以,我开始了类似...

String text = "2021-03-10 16:37:02.4230000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS");

LocalDateTime ldt1 = LocalDateTime.parse("2021-03-10 16:37:02.4230000", formatter);
DateTimeFormatter shortFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
System.out.println(shortFormatter.format(ldt1));

LocalDateTime ldt2 = LocalDateTime.parse("2021-03-10 16:39:51.0000000", formatter);
System.out.println(shortFormatter.format(ldt2));

Which prints out...哪个打印出来...

2021-03-10 16:37:02.4
2021-03-10 16:39:51.0

Hmmm, not quite what we're looking for.嗯,不是我们要找的东西。

Lucky for us, there's the DateTimeFormatterBuilder class. So next, I tried something like...幸运的是,有DateTimeFormatterBuilder class。接下来,我尝试了类似...

DateTimeFormatter toFormatter = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd HH:mm:ss")
        .appendFraction(ChronoField.MILLI_OF_SECOND, 1, 9, true)
        .toFormatter();

System.out.println(toFormatter.format(ldt1));
System.out.println(toFormatter.format(ldt2));

Which prints out...哪个打印出来...

2021-03-10 16:37:02.423
2021-03-10 16:39:51.0

Success成功

Now, please note, I've not really used DateTimeFormatterBuilder before, so there might be some other, really super awesome cool way to achieve the same or better result, but hay, it's a nice start现在,请注意,我之前并没有真正使用过DateTimeFormatterBuilder ,所以可能还有其他一些非常棒的酷方法可以达到相同或更好的结果,但是,这是一个不错的开始

This can done using replaceAll method of String as well.这也可以使用 String 的replaceAll方法来完成。 you can remove the trailing zero's in the date string if there is no milisecond left after removing all trailing zero's, then append .0如果删除所有尾随零后没有毫秒,则可以删除日期字符串中的尾随零,然后 append .0

private static String getMiliSecond(String input) {
        // removing trailing zeros
        String miliSecondTrimmed = input.replaceAll("[0.]*$", "");
        // if there is there is no mili second left after removing zeros, append .0 
        return (!miliSecondTrimmed.contains("."))?(miliSecondTrimmed+(".0").toString()):miliSecondTrimmed;
    }

This code called from main method此代码从 main 方法调用

public static void main(String[] args) {

        String input1 ="2021-03-10 16:39:51.0000000";
        String input2 = "2021-03-10 16:37:02.4230000";
        String miliSecond1 = getMiliSecond(input1);
        String miliSecond2 = getMiliSecond(input2);
        System.out.println("input1 mili:"+miliSecond1);
        System.out.println("input2 mili:"+miliSecond2);

    }

Output: Output:

input1 mili:2021-03-10 16:39:51.0
input2 mili:2021-03-10 16:37:02.423

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' 格式 - yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' format Java 字符串日期到 XMLGregorianCalendar whit 格式 yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' - Java String date to XMLGregorianCalendar whit format yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z' 将java.sql.timestamp从yyyy-MM-dd hh:mm:ss转换为MM-dd-yyyy hh:mm:ss - Convert java.sql.timestamp from yyyy-MM-dd hh:mm:ss to MM-dd-yyyy hh:mm:ss Joda DateTime格式为yyyy-MM-DD HH:MM:SS - Joda DateTime format to yyyy-MM-DD HH:MM:SS Java 格式 yyyy-MM-dd'T'HH:mm:ss.SSSz 到 yyyy-mm-dd HH:mm:ss - Java format yyyy-MM-dd'T'HH:mm:ss.SSSz to yyyy-mm-dd HH:mm:ss 如何将 java.sql.Timestamp(yyyy-MM-dd HH:mm:ss.S) 格式化为日期(yyyy-MM-dd HH:mm:ss) - How to format a java.sql.Timestamp(yyyy-MM-dd HH:mm:ss.S) to a date(yyyy-MM-dd HH:mm:ss) 如何比较 java 格式“EEE MMM dd HH:mm:ss zzz yyyy”和“yyyy-MM-dd hh:mm:sss”的日期时间? - How to compare the datetime of format "EEE MMM dd HH:mm:ss zzz yyyy" and "yyyy-MM-dd hh:mm:sss" in java? 从“yyyy-MM-dd hh:mm:ss.SSS”解析日期和时间 -------> android中的“hh:mm aa” - Parsing Date and time from "yyyy-MM-dd hh:mm:ss.SSS" -------> "hh:mm aa" in android YYYY-MM-DD HH:MM:SS格式的时间值 - Time value in YYYY-MM-DD HH:MM:SS format @DateTimeFormat(pattern = “yyyy-MM-dd hh:mm:ss”) 不工作 - @DateTimeFormat(pattern = “yyyy-MM-dd hh:mm:ss”) is Not Working
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM