在有年、月、日、时、分的情况下,如何根据设备配置的日期和时间正确格式化?


当前回答

The other answers are generally correct. I should like to contribute the modern answer. The classes Date, DateFormat and SimpleDateFormat used in most of the other answers, are long outdated and have caused trouble for many programmers over many years. Today we have so much better in java.time, AKA JSR-310, the modern Java date & time API. Can you use this on Android yet? Most certainly! The modern classes have been backported to Android in the ThreeTenABP project. See this question: How to use ThreeTenABP in Android Project for all the details.

这段代码应该让你开始:

    int year = 2017, month = 9, day = 28, hour = 22, minute = 45;
    LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute);
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
    System.out.println(dateTime.format(formatter));

当我将电脑的首选语言设置为美式英语或英式英语时,打印如下:

Sep 28, 2017 10:45:00 PM

当我把它设置为丹麦语时,我得到:

28-09-2017 22:45:00

所以它符合构型。不过,我不确定它具体跟踪了你设备的日期和时间设置的哪些细节,而且这可能因手机而异。

其他回答

使用Time类中的构建!

Time time = new Time();
time.set(0, 0, 17, 4, 5, 1999);
Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));

您可以使用DateFormat。结果取决于手机的默认Locale,但你也可以指定Locale:

https://developer.android.com/reference/java/text/DateFormat.html

这是a的结果

DateFormat.getDateInstance().format(date)                                          

地点:2017年11月3日

美国/En当地:Jan 12, 1952


DateFormat.getDateInstance(DateFormat.SHORT).format(date)

地点:03/11/2017

美国和地区:12.13.52


DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)

地点:2017年11月3日

美国/En当地:Jan 12, 1952


DateFormat.getDateInstance(DateFormat.LONG).format(date)

当地时间:2017年11月3日

美国/现场:1952年1月12日


DateFormat.getDateInstance(DateFormat.FULL).format(date)

当地时间:2017年11月3日星期五

美国/现场:1952年4月12日,星期二


DateFormat.getDateTimeInstance().format(date)

FR地点:2017年11月3日16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)

FR地区:03/11/2017 16:04


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)

本地:03/11/2017 16:04:58


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)

本地FR: 03/11/2017 16:04:58 GMT+01:00


DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)

当地时间:中欧标准时间03/11/2017 16:04:58


DateFormat.getTimeInstance().format(date)

本地FR: 16:04:58


DateFormat.getTimeInstance(DateFormat.SHORT).format(date)

本地FR: 16:04


DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)

本地FR: 16:04:58


DateFormat.getTimeInstance(DateFormat.LONG).format(date)

本地FR:格林尼治时间16:04:58 +01:00


DateFormat.getTimeInstance(DateFormat.FULL).format(date)

当地时间:中欧标准时间16:04:58


使用这两个作为类变量:

 public java.text.DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
 private Calendar mDate = null;

像这样使用它:

 mDate = Calendar.getInstance();
 mDate.set(year,months,day);                   
 dateFormat.format(mDate.getTime());

这是我的方法,可以定义和输入输出格式。

public static String formattedDateFromString(String inputFormat, String outputFormat, String inputDate){
    if(inputFormat.equals("")){ // if inputFormat = "", set a default input format.
        inputFormat = "yyyy-MM-dd hh:mm:ss";
    }
    if(outputFormat.equals("")){
        outputFormat = "EEEE d 'de' MMMM 'del' yyyy"; // if inputFormat = "", set a default output format.
    }
    Date parsed = null;
    String outputDate = "";

    SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, java.util.Locale.getDefault());
    SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, java.util.Locale.getDefault());

    // You can set a different Locale, This example set a locale of Country Mexico.
    //SimpleDateFormat df_input = new SimpleDateFormat(inputFormat, new Locale("es", "MX"));
    //SimpleDateFormat df_output = new SimpleDateFormat(outputFormat, new Locale("es", "MX"));

    try {
        parsed = df_input.parse(inputDate);
        outputDate = df_output.format(parsed);
    } catch (Exception e) { 
        Log.e("formattedDateFromString", "Exception in formateDateFromstring(): " + e.getMessage());
    }
    return outputDate;

}

这是最简单的方法:

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a", Locale.US);

    String time = df.format(new Date());

如果你在寻找模式,检查这个 https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html