如何在Android中格式化日期和时间?

377

如何根据设备配置的日期和时间正确格式化具有年、月、日、小时和分钟的时间?

26个回答

9

SimpleDateFormat

我使用SimpleDateFormat 不带自定义格式 获取设备预设的实际日期和时间:

public static String getFormattedDate() {
    //SimpleDateFormat called without pattern
    return new SimpleDateFormat().format(Calendar.getInstance().getTime());
}

返回值:

  • 13.01.15 11:45
  • 1/13/15 上午10:45
  • ...

9
这是我的方法,你可以定义输入和输出格式。
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;

}

8
这个代码对我有用!
Date d = new Date();
    CharSequence s = android.text.format.DateFormat.format("MM-dd-yy hh-mm-ss",d.getTime());
    Toast.makeText(this,s.toString(),Toast.LENGTH_SHORT).show();

8
日期格式类可以使用作弊代码来创建日期,例如:
  1. M-> 7,MM-> 07,MMM-> Jul,MMMM-> July
  2. EEE-> Tue,EEEE-> Tuesday
  3. z-> EST,zzz-> EST,zzzz-> Eastern Standard Time
您可以在此处查看更多的作弊方法

7

这绝对是最短的方法,尽管在 Kotlin 上没有删除美元符号对我不起作用:String.format("%1tY-%<tm-%<td %<tR", Calendar.getInstance()) - Gnzlt

7

使用内置的时间类!

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

这是最佳解决方案,因为它使用了 Android 框架中的轻量级 Time 对象:http://developer.android.com/reference/android/text/format/Time.html - Dean Wild
13
这不是最佳解决方案:它没有考虑用户所在地区的日期格式。 - Dan Hulme

5
其他答案基本正确。我想贡献现代答案。在其他答案中使用的类DateDateFormatSimpleDateFormat已经过时,并且多年来给许多程序员带来了麻烦。今天,我们有更好的选择,即java.time,也称为JSR-310,这是现代Java日期和时间API。您可以在Android上使用它吗?当然可以!现代类已经被移植到Android中,即ThreeTenABP项目中。有关所有详细信息,请参见此问题:如何在Android项目中使用ThreeTenABP
以下代码片段可以帮助您入门:
    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

因此,它确实遵循配置。但我不确定它会完全遵循您设备的日期和时间设置,并且这可能因手机而异。


4
这段代码会返回当前的日期和时间:
public String getCurrDate()
{
    String dt;
    Date cal = Calendar.getInstance().getTime();
    dt = cal.toLocaleString();
    return dt;
}

1
toLocaleString()已被弃用。 - nspo

4

本地化

要从毫秒数获取本地格式的日期或时间,我使用了以下方法:

日期和时间

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

日期

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault());
dateFormat.format(date);

时间

Date date = new Date(milliseconds);
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault());
dateFormat.format(date);

您可以使用其他日期样式和时间样式。有关样式的更多信息,请单击此处


4
我这样使用它:
public class DateUtils {
    static DateUtils instance;
    private final DateFormat dateFormat;
    private final DateFormat timeFormat;

    private DateUtils() {
        dateFormat = android.text.format.DateFormat.getDateFormat(MainApplication.context);
        timeFormat = android.text.format.DateFormat.getTimeFormat(MainApplication.context);
    }

    public static DateUtils getInstance() {
        if (instance == null) {
            instance = new DateUtils();
        }
        return instance;
    }

    public synchronized static String formatDateTime(long timestamp) {
        long milliseconds = timestamp * 1000;
        Date dateTime = new Date(milliseconds);
        String date = getInstance().dateFormat.format(dateTime);
        String time = getInstance().timeFormat.format(dateTime);
        return date + " " + time;
    }
}

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