我从 SAX 解析中获取日期字符串,如下所示:Wed, 18 Apr 2012 07:55:29 +0000
现在,我希望这个字符串为:2012 年 4 月 18 日 01:25 PM
我怎样才能做到这一点?
我从 SAX 解析中获取日期字符串,如下所示:Wed, 18 Apr 2012 07:55:29 +0000
现在,我希望这个字符串为:2012 年 4 月 18 日 01:25 PM
我怎样才能做到这一点?
SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date = format.format(Date.parse("Your date string"));
更新 :-
如上,Date.parse("Your date string");
已弃用。
String strCurrentDate = "Wed, 18 Apr 2012 07:55:29 +0000";
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss Z");
Date newDate = format.parse(strCurrentDate);
format = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
String date = format.format(newDate);
这将做到:
public static String formateDateFromstring(String inputFormat, String outputFormat, String inputDate){
Date parsed = null;
String outputDate = "";
SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());
try {
parsed = df_input.parse(inputDate);
outputDate = df_output.format(parsed);
} catch (ParseException e) {
LOGE(TAG, "ParseException - dateFormat");
}
return outputDate;
}
例子:
String date_before = "1970-01-01";
String date_after = formateDateFromstring("yyyy-MM-dd", "dd, MMM yyyy", date_before);
输出:
date_after = "01, Jan 1970";
从官方文档中,在新的 API (18+) 中你应该实现这个:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);
String time=sdf.format(new Date());
文档:http: //developer.android.com/reference/java/text/SimpleDateFormat.html
最简单的解决方案是使用DateFormat的 getter 方法: getDateTimeInstance DateFormat 对象格式日期如下:1969 年 12 月 31 日下午 4:00:00,但是在 4:00 之后还有那些额外的零
Date date = new Date();
String fDate = DateFormat.getDateTimeInstance().format(date);
System.out.println(fDate);
这对我有用,使用SimpleDateFormat和Calendar
String originDate = "Wed, 18 Apr 2012 07:55:29 +0000";
SimpleDateFormat formatIn = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss Z");
SimpleDateFormat formatOut = new SimpleDateFormat("MMM dd,yyyy hh:mm a");
Calendar calendar = Calendar.getInstance();
calendar.setTime(formatIn.parse(originDate));
String newDate = formatOut.format(calendar.getTime());
这个问题的现代答案已经过期了。当这个问题在 2012 年被问到时,使用SimpleDateFormat
和/或DateFormat
其他答案是正确的,即使这些课程一直很麻烦。几年后,它们被现代 Java 日期和时间 API 的 java.time 所取代,坦率地说,我发现使用它要好得多。所以我正在这样做。
我建议您将转换分为两个操作。在您的程序中,不要将日期和时间保留为字符串。将它们保留为适当的日期时间对象。因此,当从 SAX 解析时,还将日期时间字符串解析为OffsetDateTime
立即。稍后当您需要向用户显示日期和时间(或将其传输到另一个系统)时,将其转换为用户的时区并将其格式化为用于该目的的适当字符串。
解析成 OffsetDateTime
您得到的字符串符合 RFC 1123 格式。java.time 有一个内置的格式化程序,这很好,因为它使我们免于构建自己的格式化程序。
String stringFromSaxParsing = "Wed, 18 Apr 2012 07:55:29 +0000";
OffsetDateTime dateTime = OffsetDateTime.parse(
stringFromSaxParsing, DateTimeFormatter.RFC_1123_DATE_TIME);
System.out.println(dateTime);
此片段的输出是:
2012-04-18T07:55:29Z
转换为用户的时区和格式
DateTimeFormatter wantedFormatter = DateTimeFormatter.ofPattern("MMM dd, uuuu hh:mm a", Locale.ENGLISH);
String formatted = dateTime.atZoneSameInstant(ZoneId.systemDefault())
.format(wantedFormatter);
System.out.println(formatted);
我在亚洲/科伦坡时区运行它并得到了想要的:
2012 年 4 月 18 日 01:25 PM
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6。
org.threeten.bp
子包中导入日期和时间类。java.time
第一次描述的地方。java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。这是我的解决方案,可能对您有所帮助
public static void setFormattedEventDate(TextView textView,String start_date , String end_date){
SimpleDateFormat formatIn = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat formatOut = new SimpleDateFormat("dd MMM");
try {
Date startDate = formatIn.parse(start_date);
Date endDate = formatIn.parse(end_date);
String outputStartDate = formatOut.format(startDate);
String outputEndDate = formatOut.format(endDate);
textView.setText(outputStartDate+" - "+outputEndDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
然后像这样调用这个方法
setFormattedEventDate(contentViewHolder.rowItemEventBinding.txtCompetitionDate, event.datestart, event.dateend);