您的代码存在三个主要问题:
- 使用
m
[Minute in hour] 代替M
[Month in year]。
- 使用
H
[Hour in day (0-23)] 而不是h
[Hour in am/pm (1-12)]。查看文档以了解有关这两点的更多信息。
- 不
Locale
与SimpleDateFormat
. 选中Never use SimpleDateFormat or DateTimeFormatter without a Locale以了解更多信息。
因此,具有正确格式的实例化将是:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a", Locale.ENGLISH);
java.time
请注意,java.util
日期时间 API 及其格式化 APISimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *,该 API 于 2014 年 3 月作为 Java SE 8 标准库的一部分发布。
使用java.time
现代日期时间 API 的解决方案:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.now(ZoneOffset.UTC);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/uuuu hh:mm:ss a", Locale.ENGLISH);
String formatted = dtf.format(odt);
System.out.println(formatted);
}
}
在这里,您可以使用y
代替,u
但我更喜欢u
使用y
.
ONLINE DEMO
从Trail: Date Time了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。