检查特定的日期格式,如果没有在末尾添加0 java

问题描述 投票:0回答:1

我正在尝试检查日期是否采用所需格式,如果不是所需格式(yyyy-MM-dd'T'HH:mm:sss),我需要在末尾添加零以返回所需格式的日期 例如,如果我得到 String inputDate= 2018-08-04T09:07:12.42 并且我需要将 inputdate 转换为 2018-08-04T09:07:12.420。 对于convertStringToDate,我传递 inputDate = 2018-08-04T09:07:12.42 和 dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"。我尝试了下面的代码,但我不确定我错过了哪里。请推荐

 public Date convertStringToDate(String inputDate, String dateFormat) {
    String formattedInput = inputDate;
    try {
      // add milliseconds if missing from date
      if (validateDateFormat(inputDate, "yyyy-MM-dd'T'HH:mm:ss") && !validateDateFormat(inputDate, dateFormat)) {
        formattedInput = inputDate + "0";
      }
      Log.logInfo(this, "formattedInput: " + formattedInput);
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
      return simpleDateFormat.parse(formattedInput);
    } catch (Exception e) {
      Log.logError(this, "error in inputDate: " + formattedInput + " - convertStringToDate: " + e.getMessage());
      return null;
    }
  }

 public boolean validateDateFormat(String strDate, String dateFormat) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
    simpleDateFormat.setLenient(false);
    Date javaDate = null;
    try {
      javaDate = simpleDateFormat.parse(strDate);
      Log.logInfo(this, "formattedInput Date: " + javaDate);
      return true;
    }
    /* Date format is invalid */
    catch (Exception e) {
      Log.logInfo(this, strDate + " is Invalid Date format");
      return false;
    }
    /* Return true if date format is valid */
  }
java date-format
1个回答
0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的旧版
java.util
日期时间 API
。任何新代码都应使用
java.time
API。

使用现代日期时间 API 的解决方案

无论日期时间字符串的秒分数部分是否有一位/两位/三位数字,它们都符合 ISO 8601 标准,因此,您不需要

DateTimeFormatter
来使用以下命令将日期时间字符串解析为
LocalDateTime
LocalDateTime#parse(CharSequence text)
.

但是,为了在格式化

LocalDateTime
后得到的字符串中始终保留三位数字,您需要将
.SSS
与格式化程序一起使用,即
DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH)

演示

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Stream.of(
                "2018-08-04T09:07:12.421",
                "2018-08-04T09:07:12.42",
                "2018-08-04T09:07:12.4"
            )
            .map(LocalDateTime::parse)
            .map(dt -> dt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH)))
            .forEach(System.out::println);
    }
}

输出

2018-08-04T09:07:12.421
2018-08-04T09:07:12.420
2018-08-04T09:07:12.400

Trail:日期时间了解有关现代日期时间 API 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.