字符串到日期格式java



我有这个String date="2021-04-25T18:54:18",我应该这样格式化:HH:mm,dd-mmm-yyyy-

我试过这个

String date="2021-04-25T18:54:18";
Date format= null;
try {
format = new SimpleDateFormat("HH:mm, yyyy-MM-dd'T", Locale.ENGLISH).parse(date);
holder.tvDate.setText(format.toString());
} catch (ParseException e) {
e.printStackTrace();
}

但不起作用

传统日期时间API(java.util日期时间类型及其格式API、SimpleDateFormat(已过时且错误。建议完全停止使用它们,并切换到java.time,即现代日期时间API*

使用现代日期时间API:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "2021-04-25T18:54:18";
LocalDateTime ldt = LocalDateTime.parse(strDateTime);
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("HH:mm ,dd MMM yyyy", Locale.ENGLISH);
String output = dtfOutput.format(ldt);
System.out.println(output);
}
}

输出:

18:54 ,25 Apr 2021

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

使用传统API:

您需要两个格式化程序:一个用于输入模式,一个用于输出模式。在现代API的情况下,您不需要两个格式化程序,因为现代API基于ISO8601,并且您的日期时间字符串已经是这种格式。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) throws ParseException {
String strDateTime = "2021-04-25T18:54:18";
SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
Date date = sdfInput.parse(strDateTime);
SimpleDateFormat sdfOutput = new SimpleDateFormat("HH:mm ,dd MMM yyyy", Locale.ENGLISH);
String output = sdfOutput.format(date);
System.out.println(output);
}
}

输出:

18:54 ,25 Apr 2021

*出于任何原因,如果您必须坚持使用Java 6或Java 7,您可以使用ThreeTen BackportJava.time的大部分功能向后移植到Java 6&7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查通过desugaring和如何在Android项目中使用ThreeTenABP提供的Java 8+API

您缺少一个步骤。SimpleDateFormat只能以您指定的格式解析日期。您正试图解析一个";yyyy-MM-dd"基于字符串的;HH:mm"日期这是行不通的。

首先转换您的";yyyy-MM-dd";日期字符串转换为日期。然后,将该日期格式化为需要的字符串

String input = "2021-04-25T18:54:18";
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH).parse(input);
String output = new SimpleDateFormat("HH:mm, yyyy-MM-dd", Locale.ENGLISH).format(date);