日期格式转换 Android

11
我有一个日期的字符串形式:
2011-03-27T09:39:01.607

我想将其格式化为2011年3月27日

我正在使用

DateFormat[] formats = new DateFormat[] {
DateFormat.getDateInstance(), DateFormat.getDateTimeInstance(),
         DateFormat.getTimeInstance(), };
String actDate= formats[0].format(uploadeddate.substring(0,9));

但它没有起作用。

我怎样才能将其转换为March 27, 2011


1
尝试使用 SimpleDateFormat - Asad Rasheed
我已经为这个问题创建了一个方法。请参考此链接:https://dev59.com/l1sV5IYBdhLWcg3wrAZJ#40042733 - Rahul Sharma
9个回答

14

试一下这个

SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
java.util.Date date = null;
try 
{
    date = form.parse("2011-03-27T09:39:01.607");
}
catch (ParseException e) 
{

    e.printStackTrace();
}
SimpleDateFormat postFormater = new SimpleDateFormat("MMMMM dd, yyyy");
String newDateStr = postFormater.format(date);

现在 newDateStr = 2011年3月27日;


9
也许这些能对您有所帮助:
String convertDate(String inputDate) {

    DateFormat theDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;

    try {
        date = theDateFormat.parse(inputDate);
    } catch (ParseException parseException) {
        // Date is invalid. Do what you want.
    } catch(Exception exception) {
        // Generic catch. Do what you want.
    }

    theDateFormat = new SimpleDateFormat("MMM dd, yyyy");

    return theDateFormat.format(date);
}

1
第一行的日期格式与输入字符串的格式不匹配。无论如何,这个答案也会为新手提供一些帮助。 - Naved

4

您可以这样使用android.text.format.DateFormat

DateFormat.getMediumDateFormat(context).format(date);

3
String dateimput = "2011-03-27T09:39:01.607"

SimpleDateFormat formatrecived = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    
SimpleDateFormat formarwanted = new SimpleDateFormat("MMMM dd, yyyy");

Date recived = formatrecived.parse(dateimput);

Date output = formatwanted.format(recived);

注意:你需要使用replace和substring将dateimput格式化为yyyy-MM-dd hh:mm:ss


1
要获得上午或下午和12小时日期格式,请使用字符串格式化程序hh:mm:ss a,其中hh表示12小时制,a表示AM PM格式。
注意## HH表示24小时制,hh表示12小时制日期格式。
SimpleDateFormat formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm:ss a");
        String newFormat = formatter.format(testDate);

例子

String date = "2011/11/12 16:05:06";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd HH:MM:SS");
    Date testDate = null;
    try {
        testDate = sdf.parse(date);
    }catch(Exception ex){
        ex.printStackTrace();
    }
    SimpleDateFormat formatter = new SimpleDateFormat("mm/dd/yyyy hh:mm:ss a");
    String newFormat = formatter.format(testDate);
    System.out.println(".....Date..."+newFormat);

0
你需要做的是创建一个日期格式,以便解析出你想要的日期。格式化必须完全符合时间戳的格式,然后我创建了另一个格式来定义日期的外观,并进行解析。
查看文档,了解用于格式化和解析的确切内容。一旦我搞清楚了这一点,就变得更容易了。

0

我想贡献现代的解决方案。

Java.time 和 ThreeTenABP

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);

    String uploadeddate = "2011-03-27T09:39:01.607";
    LocalDateTime ldt = LocalDateTime.parse(uploadeddate);
    String actDate = ldt.format(dateFormatter);
    System.out.println(actDate);

当我将默认区域设置为英语并运行此片段时,输出结果与您要求的相同:
引用:

2011年3月27日

我利用了您的字符串采用标准ISO 8601格式以及java.time类解析此格式的事实。通常,在从一种格式转换为另一种格式的日期/时间字符串重新格式化时,使用两个格式化程序,一个指定要转换的格式,另一个指定要转换的格式。但由于您的源格式是默认格式,因此我们可以在这里仅使用一个格式化程序。
您的代码出了什么问题?
  • 你的计算有误:uploadeddate.substring(0,9)会给你2011-03-2,但我确定你想要的是2011-03-27
  • 你向formats[0].format()传递了一个String,但它无法格式化字符串。它只接受DateLong,因此你需要先将其转换为其中之一。代码可以编译,但会抛出java.lang.IllegalArgumentException: Cannot format given Object as a Date异常。

问题:我能在Android上使用java.time吗?

是的,java.time可以在旧版和新版Android设备上很好地工作。它只需要至少Java 6

  • 在Java 8及更高版本以及新的Android设备(API级别26以上)中,现代API已经内置。
  • 在Java 6和7中,获取ThreeTen Backport,即现代类的后移版本(JSR 310的ThreeTen;请参见底部链接)。
  • 在(旧版)Android上使用ThreeTen Backport的Android版本。它被称为ThreeTenABP。并确保从org.threeten.bp导入日期和时间类及其子包。

链接


0
public static String getFormatedDate(String strDate, String sourceFormate,
        String destinyFormate) {
    SimpleDateFormat df;
    df = new SimpleDateFormat(sourceFormate);
    Date date = null;
    try {
        date = df.parse(strDate);

    } catch (ParseException e) {
        e.printStackTrace();
    }

    df = new SimpleDateFormat(destinyFormate);
    return df.format(date);

}

调用方式如下:

getFormatedDate(strDate, "yyyy-MM-dd HH:mm:ss", "mm/dd/yyyy");

0

使用Joda-Time库的示例代码。

DateTime dateTime = new DateTime( "2011-03-27T09:39:01.607", DateTimeZone.forID( "Asia/Kolkata" ) );
DateTimeFormatter formatter = DateTimeFormat.forStyle( "M-" );
String output = formatter.withLocale( java.util.Locale.ENGLISH ).print( dateTime );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接