Java 日期格式转换

Java 日期格式转换,java,android,date,Java,Android,Date,我有日期的字符串形式: 2011-03-27T09:39:01.607 我想将其格式化为2011年3月27日 我正在使用 DateFormat[] formats = new DateFormat[] { DateFormat.getDateInstance(), DateFormat.getDateTimeInstance(), DateFormat.getTimeInstance(), }; String actDate= formats[0].format(upload

我有日期的字符串形式:

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));
但它不起作用


如何转换为2011年3月27日的

您可以通过以下方式使用
android.text.format.DateFormat

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

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

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

查看文档,了解如何使用格式化,以及如何使用解析。一旦我明白了这一点,事情就变得容易多了

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

注意:日期输入您需要使用替换和子字符串将格式设置为
yyyy-MM-dd hh:MM:ss

这可能有任何帮助

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);
}
试试这个

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日

使用库的示例代码

可以这样说:

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

要获取AM或PM和12小时日期格式,请使用
hh:mm:ss a
作为字符串格式化程序,其中
hh
表示12小时格式,
a
表示AM-PM格式

注##HH表示24小时,而
HH
表示12小时日期格式。 例子
我想提供一个现代的答案

java.time和ThreeTenABP 当我将默认语言环境设置为英语并运行此代码段时,输出是您要求的:

2011年3月27日

我正在利用这样一个事实:您的字符串是标准ISO 8601格式,java.time类将此格式解析为默认格式。通常,在将日期/时间字符串从一种格式重新格式化为另一种格式时,会使用两个格式化程序,一个指定要转换的格式,另一个指定要转换的格式。但是,由于您的源格式是默认格式,我们在这里只能使用一个格式化程序

你的代码出了什么问题?
  • 您的计数错误:
    uploadeDate。子字符串(0,9)
    为您提供
    2011-03-2
    我确信您想要的
    2011-03-27
  • 您已将
    字符串
    传递给
    格式[0]。format()
    ,但它无法格式化字符串。它接受
    日期
    ,因此您需要先转换为其中一个。代码进行编译,但抛出
    java.lang.IllegalArgumentException:无法将给定对象格式化为日期
问题:我可以在Android上使用java.time吗? 是的,java.time在较旧和较新的Android设备上运行良好。它至少需要Java6

  • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
  • 在Java6和Java7中,获取三个后端口,即现代类的后端口(三个十用于JSR310;参见底部的链接)
  • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
    org.threeten.bp
    导入日期和时间类
链接
  • 解释如何使用java.time
  • ,其中首先描述了
    java.time
  • ,java.time的后端口
到Java6和Java7(JSR-310为三十)
  • ,Android版Three Ten Backport
  • ,解释得非常透彻

  • 试试。我已经为这种问题创建了一种方法。请参阅第一行中日期的格式,与输入字符串的格式不匹配。无论如何,这个答案也会对新来的人有所帮助。
    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");
    
    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);
    
        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);