如何将LocalDate格式化为字符串?

我有一个LocalDate变量,名为date,当我打印它时,它会显示1988-05-05,我需要将其转换为打印为05。1988年5月。如何做到这一点?

432540 次浏览

一个很好的方法是使用SimpleDateFormat,我会告诉你怎么做:

SimpleDateFormat sdf = new SimpleDateFormat("d MMMM YYYY");
Date d = new Date();
sdf.format(d);

我看到你有一个变量的日期:

sdf.format(variable_name);

欢呼。

SimpleDateFormat将不能工作,如果他开始与LocalDate,这是新的在Java 8。从我所看到的,你必须使用DateTimeFormatter, http://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

LocalDate localDate = LocalDate.now();//For reference
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd LLLL yyyy");
String formattedString = localDate.format(formatter);

应该是1988年5月5日。要获得日之后月之前的周期,可能必须使用“dd”。LLLL yyyy”

在ProgrammersBlock帖子的帮助下,我想出了这个。我的需求略有不同。我需要获取一个字符串并将其作为LocalDate对象返回。我拿到的代码使用的是旧的Calendar和SimpleDateFormat。我想让它更与时俱进。这是我想到的。

    import java.time.LocalDate;
import java.time.format.DateTimeFormatter;




void ExampleFormatDate() {


LocalDate formattedDate = null;  //Declare LocalDate variable to receive the formatted date.
DateTimeFormatter dateTimeFormatter;  //Declare date formatter
String rawDate = "2000-01-01";  //Test string that holds a date to format and parse.


dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE;


//formattedDate.parse(String string) wraps the String.format(String string, DateTimeFormatter format) method.
//First, the rawDate string is formatted according to DateTimeFormatter.  Second, that formatted string is parsed into
//the LocalDate formattedDate object.
formattedDate = formattedDate.parse(String.format(rawDate, dateTimeFormatter));


}

希望这能帮助到一些人,如果有人看到了更好的方法来完成这个任务,请添加您的输入。

System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern("dd.MMMM yyyy")));

上面的答案就是今天的答案

可以简短为:

LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

Joda图书馆中的有一个内置的方法来格式化LocalDate

import org.joda.time.LocalDate;


LocalDate localDate = LocalDate.now();
String dateFormat = "MM/dd/yyyy";
localDate.toString(dateFormat);

如果你还没有它-添加到build.gradle:

implementation 'joda-time:joda-time:2.9.5'

编码快乐!:)

java.time

不幸的是,所有现有的答案都遗漏了一个关键的东西,Locale. .

日期-时间解析/格式化类型(例如现代API的DateTimeFormatter或遗留API的SimpleDateFormat)是__abc2敏感的。其模式中使用的符号根据与它们一起使用的Locale打印文本。如果没有Locale,则使用JVM的默认Locale。检查这个答案来了解更多关于它的信息。

预期输出中的文本05.May 1988是英文的,因此,现有的解决方案只会产生仅仅是巧合的结果(当JVM的默认Locale是英文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);
}
}

输出:

05.May 1988

在这里,你可以使用yyyy代替uuuu,而使用我更喜欢 uy

Trail: Date Time了解有关现代日期-时间API的更多信息。


*无论出于何种原因,如果你必须坚持使用Java 6或Java 7,你可以使用< em > < >强ThreeTen-Backport < /强> < / em >,它将大部分java.time功能向后移植到Java 6 &7. 如果你正在为一个Android项目工作,而你的Android API级别仍然不符合Java-8,检查通过糖化可获得Java 8+ api如何在Android项目中使用ThreeTenABP。 < /一口> < / p >