我有一个名为date的LocalDate变量,当我打印它显示1988-05-05我需要转换它打印为05.May 1988.How这样做?
Pro*_*ock 268
如果他开始使用Java 8中新增的LocalDate,SimpleDateFormat将无法工作.从我所看到的,你将不得不使用DateTimeFormatter,http://docs.oracle.com/javase/8/docs/api/java/时间/格式/ DateTimeFormatter.html.
LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);
Run Code Online (Sandbox Code Playgroud)
这应该打印在1988年5月5日.要获得一天之后和月之前的时间段,你可能不得不使用"dd'.LLLL yyyy"
Zon*_*Zon 21
可以简短为:
LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Run Code Online (Sandbox Code Playgroud)
Arv*_*ash 14
不幸的是,所有现有的答案都忽略了一个关键的事情,Locale
。
日期时间解析/格式化类型(例如DateTimeFormatter
现代 API 或SimpleDateFormat
遗留 API 的)是Locale
敏感的。其图案中使用的符号根据Locale
它们所使用的内容打印文本。如果没有,它将使用JVM 的Locale
默认值。Locale
检查此答案以了解更多信息。
预期输出中的文本05.May 1988
是英语,因此,现有的解决方案仅会出于巧合而产生预期结果(当Locale
JVM 的默认值是英语时Locale
)。
使用java.time
现代日期时间 API *的解决方案:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(1988, 5, 5);
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MMMM uuuu", Locale.ENGLISH);
String output = dtf.format(date);
System.out.println(output);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
05.May 1988
Run Code Online (Sandbox Code Playgroud)
在这里,您可以使用yyyy
来代替uuuu
,但我更喜欢 u
使用y
。
从Trail: Date Time中了解有关现代日期时间 API 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大多数java.time功能向后移植到 Java 6 和 7。如果您正在处理 Android 项目和 Android API level 仍然不符合 Java-8,请检查通过脱糖可用的 Java 8+ API以及如何在 Android 项目中使用 ThreeTenABP。
System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));
Run Code Online (Sandbox Code Playgroud)
上面的答案显示了今天
归档时间: |
|
查看次数: |
197150 次 |
最近记录: |