【发布时间】:2012-05-03 06:51:41
【问题描述】:
我从 SAX 解析中获取日期字符串,如下所示:Wed, 18 Apr 2012 07:55:29 +0000
现在,我希望此字符串为:Apr 18, 2012 01:25 PM
我该怎么做?
【问题讨论】:
标签: android
我从 SAX 解析中获取日期字符串,如下所示:Wed, 18 Apr 2012 07:55:29 +0000
现在,我希望此字符串为:Apr 18, 2012 01:25 PM
我该怎么做?
【问题讨论】:
标签: android
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";
【讨论】:
这对我有用,使用 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);
这个 sn-p 的输出是:
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 日下午 1:25
java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6。
org.threeten.bp 导入日期和时间类以及子包。java.time。java.time 的向后移植到 Java 6 和 7(JSR-310 的 ThreeTen)。【讨论】:
根据官方文档,在新的 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);
【讨论】:
这是我的解决方案,可能对您有所帮助
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);
【讨论】:
试试这个:
String dt =""; // your time value in there
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
try {
c.setTime(sdf.parse(dt));
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy");//any format you want
String output = sdf1.format(c.getTime());
【讨论】: