如何根据设备配置正确格式化具有年,月,日,小时和分钟的日期和时间?
使用标准Java DateFormat类.
例如,要显示当前日期和时间,请执行以下操作:
Date date = new Date(location.getTime()); DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); mTimeText.setText("Time: " + dateFormat.format(date));
您可以使用自己的值初始化Date对象,但是您应该知道构造函数已被弃用,您应该真正使用Java Calendar对象.
在我看来,android.text.format.DateFormat.getDateFormat(context)
让我困惑,因为这种方法返回java.text.DateFormat
而不是android.text.format.DateFormat
- - ".
因此,我使用下面的片段代码以我的格式获取当前日期/时间.
android.text.format.DateFormat df = new android.text.format.DateFormat(); df.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date()); or android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", new java.util.Date());
此外,您还可以使用其他格式.关注DateFormat.
你可以用DateFormat
.结果取决于手机的默认区域设置,但您也可以指定区域设置:
https://developer.android.com/reference/java/text/DateFormat.html
这是a的结果
DateFormat.getDateInstance().format(date)
FR Locale:3 nov.2017年
US/En Locale:1952年1月12日
DateFormat.getDateInstance(DateFormat.SHORT).format(date)
FR Locale:03/11/2017
US/En Locale:12.13.52
DateFormat.getDateInstance(DateFormat.MEDIUM).format(date)
FR Locale:3 nov.2017年
US/En Locale:1952年1月12日
DateFormat.getDateInstance(DateFormat.LONG).format(date)
FR Locale:2017年3月3日
US/En Locale:1952年1月12日
DateFormat.getDateInstance(DateFormat.FULL).format(date)
FR Locale:vendredi 3 novembre 2017
US/En Locale:1952年4月12日,星期二
DateFormat.getDateTimeInstance().format(date)
FR Locale:3 nov.2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date)
FR Locale:03/11/2017 16:04
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(date)
FR Locale:03/11/2017 16:04:58
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG).format(date)
FR Locale:03/11/2017 16:04:58 GMT + 01:00
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL).format(date)
FR Locale:03/11/2017 16:04:58 heure normale d'Europe centrale
DateFormat.getTimeInstance().format(date)
FR Locale:16:04:58
DateFormat.getTimeInstance(DateFormat.SHORT).format(date)
FR Locale:16:04
DateFormat.getTimeInstance(DateFormat.MEDIUM).format(date)
FR Locale:16:04:58
DateFormat.getTimeInstance(DateFormat.LONG).format(date)
FR Locale:格林尼治标准时间16:04:58 + 01:00
DateFormat.getTimeInstance(DateFormat.FULL).format(date)
FR Locale:16:04:58 heure normale d'Europe centrale
日期到区域设置日期字符串:
Date date = new Date(); String stringDate = DateFormat.getDateTimeInstance().format(date);
选项:
DateFormat.getDateInstance()
- > 1969年12月31日
DateFormat.getDateTimeInstance()
- > 1969年12月31日下午4:00:00
DateFormat.getTimeInstance()
- >下午4:00:00
这样做:
Date date = new Date(); java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); mTimeText.setText("Time: " + dateFormat.format(date));
使用SimpleDateFormat
像这样:
event.putExtra("starttime", "12/18/2012"); SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); Date date = format.parse(bundle.getString("starttime"));
接下来:http://developer.android.com/reference/android/text/format/Time.html
最好使用Android原生Time类:
Time now = new Time(); now.setToNow();
然后格式化:
Log.d("DEBUG", "Time "+now.format("%d.%m.%Y %H.%M.%S"));
将这两个用作类变量:
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 来从设备的预选格式中获取系统的实际日期和时间:
public static String getFormattedDate() { //SimpleDateFormat called without pattern return new SimpleDateFormat().format(Calendar.getInstance().getTime()); }
回报:
13.01.15 11:45
2015年1月13日上午10:45
...
在Time类中使用build!
Time time = new Time(); time.set(0, 0, 17, 4, 5, 1999); Log.i("DateTime", time.format("%d.%m.%Y %H:%M:%S"));
其他答案通常是正确的。我想贡献现代的答案。这些类Date
,DateFormat
以及SimpleDateFormat
大多数其他答案中使用的类,已经过时了,多年来给许多程序员带来了麻烦。今天,我们在java.time
AKA JSR-310(现代Java日期和时间API)方面有了很多改进。您可以在Android上使用它吗?最肯定的!在ThreeTenABP项目中,现代类已被移植到Android。看到以下问题:如何在Android Project中使用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
因此,它确实遵循配置。不过,我不确定它会详细说明您设备的日期和时间设置的具体细节,并且具体情况因手机而异。