java.util 日期时间类已过时且容易出错,它们的格式化 API SimpleDateFormat 也是如此。我建议你应该完全停止使用它们并切换到modern date-time API。
如果您正在为您的 Android 项目执行此操作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。
通过 Trail: Date Time 了解有关现代日期时间 API 的更多信息。
使用现代日期时间 API:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
System.out.println(formatDateStr("2020-09-23T13:45:13.371Z"));
}
static String formatDateStr(String strDate) {
return OffsetDateTime.parse(strDate).format(DateTimeFormatter.ofPattern("EEEE, MMMM d, uuuu", Locale.ENGLISH));
}
}
输出:
Wednesday, September 23, 2020
使用旧版 API:
请注意,日期时间中的Z 代表Zulu 时间(0 小时偏移),因此请确保将时区设置为UTC。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) throws ParseException {
System.out.println(formatDateStr("2020-09-23T13:45:13.371Z"));
}
static String formatDateStr(String strDate) throws ParseException {
DateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
inputFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat outputFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy", Locale.ENGLISH);
return outputFormatter.format(inputFormatter.parse(strDate));
}
}
输出:
Wednesday, September 23, 2020