根据区域设置格式化日期,然后获取日期部分

时间:2014-05-23 07:56:19

标签: java date

我想要实现的是将格式为yyyyMMdd的日期转换为区域设置格式,即yyyy/MM/dddd/MM/yyyy等。 我对时间部分不感兴趣,我只需要约会。

该函数将采用字符串日期并以区域设置格式返回字符串日期。

我目前拥有的是:

dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
convertedDate = dateFormat.parse("20120521");

我之后尝试的所有东西要么返回一个带有时间和GMT等的长字符串,要么是我传递给函数的相同字符串。

4 个答案:

答案 0 :(得分:5)

听起来你已经对解析部分进行了排序 - 完全与格式化部分分开。

对于格式化,我怀疑你想要:

DateFormat localeFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
String text = localeFormat.format(convertedDate);

...试验SHORTMEDIUMLONGFULL以了解哪一个最符合您的需求,但我怀疑它会{{1} }或SHORT

(你可以省略MEDIUM的第二个参数,它将使用默认的语言环境,但我个人建议明确地将其包括在内以便清楚。)

答案 1 :(得分:1)

您想使用内置类型的DateFormat

DateFormat df = DateFormat.getDateInstance(DateFormat.Short, Locale.getDefault()));

根据Javadocs

  

使用getDateInstance获取该国家/地区的正常日期格式。   还有其他可用的静态工厂方法。使用getTimeInstance   获取该国家/地区的时间格式。使用getDateTimeInstance来   获取日期和时间格式。您可以向这些选项传递不同的选项   工厂方法来控制结果的长度;从简短到   中等到全长。确切的结果取决于区域设置,但是   一般:

     

SHORT是完全数字的,例如12.13.52或3:30 pm MEDIUM   更长,例如1952年1月12日LONG更长,例如1952年1月12日   或者下午3:30:32 FULL完全指定,例如星期二,   公元1952年4月12日或太平洋标准时间下午3:30:42。

答案 2 :(得分:1)

以下是您的问题的答案: How can I format date by locale in Java?

一个例子:

DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, yourLocale);
String formattedDate = df.format(yourDate);

此外,如果您需要对日期做很多事情,请考虑使用Joda: Java, getting Date without time

答案 3 :(得分:0)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

使用 java.time(现代日期时间 API)的解决方案:

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

public class Main {
    public static void main(String[] args) {
        // A sample date string
        String strDate = "20210630";

        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("uuuuMMdd", Locale.ENGLISH);

        LocalDate date = LocalDate.parse(strDate, dtfInput);

        System.out.println(date.format(getShortDateFormatterForLocale(Locale.getDefault())));
        System.out.println(date.format(getShortDateFormatterForLocale(Locale.GERMANY)));
        System.out.println(date.format(getShortDateFormatterForLocale(Locale.US)));
    }

    static DateTimeFormatter getShortDateFormatterForLocale(Locale locale) {
        return DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).localizedBy(locale);
    }
}

我在英国的系统上的输出:

30/06/2021
30.06.21
6/30/21

ONLINE DEMO

Trail: Date Time 了解有关现代 Date-Time API 的更多信息。


* 出于任何原因,如果您必须坚持使用 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