我有一个以毫秒为单位的时间戳,并希望将其格式化,表示日期,月份,年份和小时的分钟。
我知道我可以指定这样的格式:
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());
但它没有显示时间。我该怎么做?
答案 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个参数
使用哪种模式自动提取的区域设置
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)
旧的日期时间 API(java.util
日期时间类型及其格式 API,SimpleDateFormat
)已经过时且容易出错。建议完全停止使用,改用java.time
,modern 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 desugaring 和 How 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());