日期格式转换Android

时间:2011-08-01 09:43:42

标签: java android date

我有日期的字符串形式:

2011-03-27T09:39:01.607

我希望将其格式化为March 27, 2011

我正在使用

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

但它不起作用。

如何转换为March 27, 2011

9 个答案:

答案 0 :(得分:13)

试试这个

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 = March 27, 2011;

答案 1 :(得分:10)

可能这有任何帮助;

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

要获取AM或PM和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);

答案 5 :(得分:0)

您要做的是为您的日期创建一种格式,以便能够按照您希望的方式解析日期。

格式化的井必须完全是您的时间戳的格式,然后我所做的是创建另一种格式,我希望日期看起来像什么,然后解析它。

查看文档,了解用于格式化的内容以及用于解析的内容。一旦我弄清楚这一点就容易了。

答案 6 :(得分: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 );

答案 7 :(得分: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");

答案 8 :(得分: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处使用。
  • 您将String传递给formats[0].format(),但是它不能格式化字符串。它接受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反向端口,这是现代类的反向端口(JSR 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接