" 2016年3月10日下午6:30:00"这是我的约会对象,我希望将其转换为" 2016年3月10日"。我可以在android中使用SimpleDateFormat吗?我没有得到转换它的确切模式。请提前帮助和感谢
String date="Mar 10, 2016 6:30:00 PM";
SimpleDateFormat spf=new SimpleDateFormat("Some Pattern for above date");
Date newDate=spf.format(date);
spf= new SimpleDateFormat("dd MMM yyyy");
String date = spf.format(newDate);
这个步骤会起作用吗?如果是,有人可以给我一个这种格式的模式吗?提前谢谢。
答案 0 :(得分:32)
这是您应该使用的修改后的代码:
String date="Mar 10, 2016 6:30:00 PM";
SimpleDateFormat spf=new SimpleDateFormat("MMM dd, yyyy hh:mm:ss aaa");
Date newDate=spf.parse(date);
spf= new SimpleDateFormat("dd MMM yyyy");
date = spf.format(newDate);
System.out.println(date);
使用hh
数小时才能获得正确的时间。
Java 8及更高版本
Java 8为时间操作引入了新类,因此在这种情况下使用以下代码:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd, yyyy h:mm:ss a");
LocalDateTime dateTime = LocalDateTime.parse(date, formatter);
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("dd MMM yyyy");
System.out.println(dateTime.format(formatter2));
使用h
作为小时格式,因为在这种情况下,小时只有一位数。
答案 1 :(得分:5)
我已经为这个问题创建了一个方法。我们只需要传递当前日期格式,所需日期格式和日期字符串。
private String changeDateFormat(String currentFormat,String requiredFormat,String dateString){
String result="";
if (Strings.isNullOrEmpty(dateString)){
return result;
}
SimpleDateFormat formatterOld = new SimpleDateFormat(currentFormat, Locale.getDefault());
SimpleDateFormat formatterNew = new SimpleDateFormat(requiredFormat, Locale.getDefault());
Date date=null;
try {
date = formatterOld.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
if (date != null) {
result = formatterNew.format(date);
}
return result;
}
此方法将以您需要的格式返回Date String。 在你的情况下,方法调用将是:
String date = changeDateFormat("MMM dd, yyyy hh:mm:ss a","dd MMM yyyy","Mar 10, 2016 6:30:00 PM");
答案 2 :(得分:2)
您应该将parse()
字符串转换为日期,然后将其格式化为所需的格式。您可以使用MMM dd, yyyy HH:mm:ss a
格式来解析给定的String。
以下是代码段:
public static void main (String[] args) throws Exception
{
String date = "Mar 10, 2016 6:30:00 PM";
SimpleDateFormat spf = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a");
Date newDate = spf.parse(date);
spf = new SimpleDateFormat("dd MMM yyyy");
String newDateString = spf.format(newDate);
System.out.println(newDateString);
}
输出:
10 Mar 2016
答案 3 :(得分:2)
为了完整起见,这是现代版本。这适用于阅读此内容的用户,他们使用Java 8或更高版本,或者对(良好且未来的)外部库感到满意。
String date = "Mar 10, 2016 6:30:00 PM";
DateTimeFormatter parseFormatter
= DateTimeFormatter.ofPattern("MMM d, uuuu h:mm:ss a", Locale.ENGLISH);
DateTimeFormatter newFormatter
= DateTimeFormatter.ofPattern("d MMM uuuu", Locale.ENGLISH);
date = LocalDateTime.parse(date, parseFormatter).format(newFormatter);
System.out.println(date);
这将打印所需的
10 Mar 2016
请注意对DateTimeFormatter
个对象使用显式语言环境。 “Mar”和“PM”都是英文的,因此除非使用一些讲英语的语言环境,否则解析和格式化都不会起作用。通过明确地给出它,我们使代码足够健壮,以便在计算机和具有其他默认语言环境的JVM上也能按预期运行。
要在Android上使用上述内容,请使用ThreeTenABP,请参阅How to use ThreeTenABP in Android Project。在其他Java 6和7上使用ThreeTen Backport。
答案 4 :(得分:2)
您需要使用SimpleDateFormat类为您做需要的事
String date = "Your input date"
DateFormat originalFormat = new SimpleDateFormat("<Your Input format here>", Locale.US)
DateFormat targetFormat = new SimpleDateFormat("<Your desired format here>", Locale.US)
Date Fdate = originalFormat.parse(date)
formattedDate = targetFormat.format(Fdate)
答案 5 :(得分:1)
从字符串到日期的转换以及从日期到字符串的转换
String deliveryDate="2018-09-04";
SimpleDateFormat dateFormatprev = new SimpleDateFormat("yyyy-MM-dd");
Date d = dateFormatprev.parse(deliveryDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE dd MMM yyyy");
String changedDate = dateFormat.format(d);
答案 6 :(得分:0)
public static String formatDate(String fromFormat, String toFormat, String dateToFormat) {
SimpleDateFormat inFormat = new SimpleDateFormat(fromFormat);
Date date = null;
try {
date = inFormat.parse(dateToFormat);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat outFormat = new SimpleDateFormat(toFormat);
return outFormat.format(date);
}
使用: formatDate(“ dd-MM-yyyy”,“ EEEE,dd MMMM yyyy”,“ 26-07-2019”);
结果: 2019年7月26日星期五