Java中的本地化日期格式
我有一个以毫秒为单位的时间戳,并希望将其格式化,以分钟为精度指示日、月、年和小时 我知道我可以指定如下格式:Java中的本地化日期格式,java,datetime-format,Java,Datetime Format,我有一个以毫秒为单位的时间戳,并希望将其格式化,以分钟为精度指示日、月、年和小时 我知道我可以指定如下格式: SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm"); String formatted = simpleDateFormat.format(900000) SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Local
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
String formatted = simpleDateFormat.format(900000)
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = sdf .format(900000);
System.out.println(simpleDateFormat.parse(formatted));
但是我希望该格式能够根据用户的区域设置进行本地化。我也试过了
DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
DATE_FORMAT.format(new Date());
但它没有显示时间。我怎么做 您可以使用
DateFormat
的方法getDateTimeInstance
。这里,getDateTimeInstance
方法接受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));
试试这样的东西
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = simpleDateFormat.format(900000);
System.out.println(simpleDateFormat.parse(formatted));
使用joda time()是不可能的吗?如果不是,那么我会全心全意地推荐使用这个很棒的库,而不是繁琐的JavaAPI
如果没有,您可以使用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的输出:
日期:7/25/13上午10:57
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
String formatted = simpleDateFormat.format(900000)
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yy HH:mm", Locale.getDefault());
String formatted = sdf .format(900000);
System.out.println(simpleDateFormat.parse(formatted));
但它不显示小时。我该怎么做?
您必须调用DateFormat.getDateTimeInstance(int,int,Locale)
DateFormat.getDateInstance(int,Locale)
=>获取具有给定区域设置的给定格式样式的日期格式化程序
而
DateFormat.getDateTimeInstance(int,int,Locale)
=>获取具有给定区域设置的给定格式样式的日期/时间格式化程序。使用可以检测系统设置并使用不同的时间格式:
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());
java.time
旧式日期时间API(java.util
date-time类型及其格式化API,SimpleDateFormat
)已过时且容易出错。建议完全停止使用它,并切换到java.time
,即*
您可以使用获取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
输出:
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
从了解有关*的更多信息
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
作为说明,似乎
DateFormat.getDateTimeInstance(int,int)
调用DateFormat.getDateTimeInstance(int,int,Locale)
使用Locale.getDefault()
无论如何,至少在当前版本的Android上是这样。如果使用Joda时间库,你会怎么做?