如何将日期转换为Android中的特定格式?

时间:2016-03-11 11:39:12

标签: java android

" 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);

这个步骤会起作用吗?如果是,有人可以给我一个这种格式的模式吗?提前谢谢。

7 个答案:

答案 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日星期五