我从SAX解析日期字符串解析如下:星期三,2012年4月18日07:55:29 +0000
现在,我希望这个字符串为: 2012年4月18日01:25
我该怎么做?
答案 0 :(得分:122)
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);
答案 1 :(得分:16)
这样做:
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";
答案 2 :(得分:5)
从官方文档中,在新的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
答案 3 :(得分:2)
最简单的解决方案是使用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);
答案 4 :(得分:1)
这个问题的现代答案已经过期。在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
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 5 :(得分:0)
这适用于我,使用 SimpleDateFormat 和日历
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());
答案 6 :(得分:0)
这是我的解决方案,可以对您有所帮助
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);