java - 迄今为止的字符串有时完整日期存在有时我在java中只得到年份
问题描述
所以正在解析json,有时我收到的包含日期的字符串已满(dd-mm-yyyy),有时我只收到yyyy,我似乎无法转换为日期,所以如果有人可以帮忙
解决方案
根据您的业务需求,您可以使用DateTimeFormatterBuilder#parseDefaulting
以下代码将月份和日期默认为所需的值,我已将月份和日期默认为今天的值:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;
class Main {
public static void main(String[] args) {
// Test
System.out.println(parseToDate("10-10-2020"));
System.out.println(parseToDate("2020"));
}
static LocalDate parseToDate(String str) {
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("[dd-MM-uuuu][uuuu]")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, today.getMonthValue())
.parseDefaulting(ChronoField.DAY_OF_MONTH, today.getDayOfMonth())
.toFormatter(Locale.ENGLISH);
return LocalDate.parse(str, formatter);
}
}
输出:
2020-10-10
2020-12-12
注意:模式,[dd-MM-uuuu][uuuu]
有两个可选模式,dd-MM-uuuu
和uuuu
。
推荐阅读
- python - 登录屏幕 kivy/kivymd
- tensorflow - Tensorflow 1.2.1:AttributeError:模块'tensorflow'没有属性'random'
- c# - 如何使用 Scaffold-DbContext 只生成 DBContext 或 Tables
- c# - 无法创建 SSL/TLS 安全通道“http://www.rtvs.sk/televizia/archiv”
- python - 使用函数名作为命令
- java - 使用 Java 的 volatile 关键字的不一致
- c# - Httpclienthandler Webproxy 值没有改变
- c++ - 当例程“free”在 C++ 中的“try”块中失败时会发生什么
- bash - ${i%.*} 在这种情况下做了什么?
- c# - C# Devexpress 面板