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

时间:2015-01-27 18:21:53

标签: java

我有一个名为date的LocalDate变量,当我打印它显示1988-05-05我需要转换它打印为05.May 1988.How怎么做?

8 个答案:

答案 0 :(得分:231)

如果SimpleDateFormat以Java 8中的新功能LocalDate开头,那么它将不起作用。从我所看到的,你将不得不使用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 y​​yyy”

答案 1 :(得分:14)

可能缩写为:

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

答案 2 :(得分:3)

java.time

不幸的是,所有现有的答案都遗漏了一个关键的事情,Locale

日期时间解析/格式化类型(例如现代 API 的 DateTimeFormatter 或旧 API 的 SimpleDateFormat)对 Locale 敏感。其模式中使用的符号根据与它们一起使用的 Locale 打印文本。在没有 Locale 的情况下,它使用 JVM 的默认 Locale。查看 this answer 以了解更多信息。

预期输出中的文本 05.May 1988 是英文的,因此,现有的解决方案只会由于巧合而产生预期结果(当 JVM 的默认 Locale 是英文时) Locale).

使用 java.time 的解决方案,modern date-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,但可以使用 I prefer u 代替 y

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


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 3 :(得分:2)

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

上面的答案显示了今天的情况

答案 4 :(得分:1)

在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));

}

希望这对某些人有帮助,如果有人看到更好的方法来完成这项任务,请添加您的意见。

答案 5 :(得分:1)

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

例如您可以使用任何一种日期模式    1. dd / MM / yyyy    2.日/月/日    3. yyyy / MM / dd

答案 6 :(得分:0)

有内置的格式化LocalDate的方式

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

祝您编程愉快! :)

答案 7 :(得分:-10)

一个非常好的方法是使用SimpleDateFormat我将告诉你如何:

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

我看到你在变量中有日期:

sdf.format(variable_name);

干杯。