4

我有一个以毫秒为单位的时间戳,并希望将其格式化,以分钟精度表示日、月、年和小时。

我知道我可以像这样指定格式:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
String formatted = simpleDateFormat.format(900000)

但我希望使用用户的语言环境对格式进行本地化。我也试过

DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
DATE_FORMAT.format(new Date());

但它没有显示小时。我该怎么做?

4

7 回答 7

13

使用 joda 时间 ( http://joda-time.sourceforge.net/ ) 是不可能的吗?如果没有,那么我会全心全意地推荐使用这个很棒的库而不是繁琐的 Java API。

如果没有,您可以使用DateFormat.getDateTimeInstance(int, int, Locale)

第一个 int 是小时的样式,另一个是时间的样式,所以尝试使用:

DateFormat f = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
String formattedDate = f.format(new Date());
System.out.println("Date: " + formattedDate);

看看这是否适合你。

Locale.GERMANY 的输出:日期:25.07.13 10:57

Locale.US 的输出:日期:2013 年 7 月 25 日上午 10:57

于 2013-07-25T08:53:11.220 回答
2

But it does not show the hour. How can I do it?

你必须打电话DateFormat.getDateTimeInstance(int, int, Locale)

DateFormat.getDateInstance(int, Locale)=> 获取具有给定语言环境的给定格式样式的日期格式器。

尽管

DateFormat.getDateTimeInstance(int, int, Locale)=> 获取具有给定语言环境的给定格式样式的日期/时间格式器。

于 2013-07-25T09:01:13.063 回答
1

您可以使用方法getDateTimeInstance, of DateFormat。这里的getDateTimeInstance方法需要 3 个参数

  1. 日期字段的样式
  2. 时间场风格
  3. 自动提取模式所使用的语言环境

    DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.US);
    System.out.println(DATE_FORMAT.format(d));
    DATE_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.FRENCH);
    System.out.println(DATE_FORMAT.format(d));
    
于 2013-07-25T08:47:05.090 回答
1

尝试这样的事情

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
    String formatted = simpleDateFormat.format(900000);
    System.out.println(simpleDateFormat.parse(formatted));
于 2013-07-25T08:51:04.537 回答
1

你可以使用这样的东西:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = sdf .format(900000);
System.out.println(simpleDateFormat.parse(formatted));
于 2013-07-25T08:58:53.693 回答
1

java.time

旧的日期时间 API(java.util日期时间类型及其格式化 API SimpleDateFormat)已过时且容易出错。建议完全停止使用它并切换到java.time现代日期时间 API *

您可以使用DateTimeFormatter.ofLocalizedDateTime获取 ISO 年表的特定于区域设置的日期格式。

演示:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtfLocalized = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT, FormatStyle.SHORT);
        // Test
        LocalDateTime date = LocalDateTime.now();

        System.out.println(dtfLocalized.withLocale(Locale.US).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.UK).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.CHINESE).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.GERMAN).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.forLanguageTag("tr")).format(date));
        System.out.println(dtfLocalized.withLocale(Locale.getDefault()).format(date));
    }
}

输出:

5/8/21, 10:49 PM
08/05/2021, 22:49
2021/5/8 下午10:49
08.05.21, 22:49
8.05.2021 22:49
08/05/2021, 22:49

Trail: Date Time了解有关现代日期时间 API *的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-05-08T21:50:04.583 回答
0

使用Joda-Time您可以检测系统设置并使用不同的时间格式:

String format;

if (DateFormat.is24HourFormat(context)) {
  format = "MM/dd/yy, hh:mm";
}
else {
  format = "MM/dd/yy, h:mm aa";
}

DateTimeFormatter formatter = DateTimeFormat.forPattern(format);
formatter.print(new DateTime());
于 2015-09-04T10:58:54.897 回答