我正在尝试检查日期是否采用所需格式,如果不是所需格式(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.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的旧版java.util
日期时间 API。任何新代码都应使用 java.time
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 的更多信息。