我想要实现的是将格式为yyyyMMdd
的日期转换为区域设置格式,即yyyy/MM/dd
或dd/MM/yyyy
等。
我对时间部分不感兴趣,我只需要约会。
该函数将采用字符串日期并以区域设置格式返回字符串日期。
我目前拥有的是:
dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault());
convertedDate = dateFormat.parse("20120521");
我之后尝试的所有东西要么返回一个带有时间和GMT等的长字符串,要么是我传递给函数的相同字符串。
答案 0 :(得分:5)
听起来你已经对解析部分进行了排序 - 完全与格式化部分分开。
对于格式化,我怀疑你想要:
DateFormat localeFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
String text = localeFormat.format(convertedDate);
...试验SHORT
,MEDIUM
,LONG
和FULL
以了解哪一个最符合您的需求,但我怀疑它会{{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.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
从 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 desugaring 和 How to use ThreeTenABP in Android Project。