Java中的本地化日期格式

时间:2013-07-25 08:44:47

标签: java datetime-format

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

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

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

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

7 个答案:

答案 0 :(得分:12)

使用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

答案 1 :(得分: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) =&gt;获取具有给定语言环境的给定格式样式的日期/时间格式化程序。

答案 2 :(得分:1)

您可以使用getDateTimeInstance的方法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));
    

答案 3 :(得分:1)

尝试这样的事情

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
    String formatted = simpleDateFormat.format(900000);
    System.out.println(simpleDateFormat.parse(formatted));

答案 4 :(得分:1)

您可以使用以下内容:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = sdf .format(900000);
System.out.println(simpleDateFormat.parse(formatted));

答案 5 :(得分:1)

java.time

旧的日期时间 API(java.util 日期时间类型及其格式 API,SimpleDateFormat)已经过时且容易出错。建议完全停止使用,改用java.timemodern date-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

modern date-time API 中了解有关 Trail: Date Time* 的更多信息。


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

答案 6 :(得分: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());
相关问题