Java日期格式化?

时间:2009-01-05 06:43:06

标签: java date formatting

我想以YYYY-MM-DD格式阅读日期。

但如果我输入日期说例如2008-1-1,我想把它读作2008-01-01。

任何人都可以帮助我吗?提前致谢

5 个答案:

答案 0 :(得分:11)

或者使用更好的Joda Time lib。

    DateTime dt = new DateTime();
    System.out.println(dt.toString("yyyy-MM-dd"));

    // The ISO standard format for date is 'yyyy-MM-dd'
    DateTimeFormatter formatter = ISODateTimeFormat.date();
    System.out.println(dt.toString(formatter));
    System.out.println(formatter.print(dt));

日期和日历API非常糟糕。

答案 1 :(得分:7)

使用SimpleDateFormat

<强> [编辑]

Few sample codes

答案 2 :(得分:7)

如果您需要使用内置的Java日期/时间处理,Adeel的解决方案很好,但我个人更喜欢使用Joda Time。在格式方面,Joda Time的主要优点是格式化程序是无状态的,因此您可以安全地在线程之间共享它。示例代码:

DateTimeFormatter parser = DateTimeFormat.forPattern("YYYY-M-D");
DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-DD");

DateTime dt = parser.parseDateTime("2008-1-1");
String formatted = formatter.print(dt); // "2008-01-01"

答案 3 :(得分:3)

import java.text.*;

public class Test
{

    public static void main(String args[])
    {
        try
        {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD");  
            System.out.println(sdf.parse(args[0]).toString());
        }
                catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

无论你是作为参数写成“2008-1-1”还是“2008-01-01”,这都可以。

答案 4 :(得分:1)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*

另外,下面引用的是来自 home page of Joda-Time 的通知:

<块引用>

请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - JDK 的核心部分,取代了该项目。

使用 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) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d", Locale.ENGLISH);
        String input = "2008-1-1";
        LocalDate date = LocalDate.parse(input, dtfInput);
        System.out.println(date);
    }
}

输出:

2008-01-01

ONLINE DEMO

注意事项:

  1. 使用 y(指定 year-of-era)而不是 Y(指定 week-based-year)。< /li>
  2. 使用 d(指定 day-of-month)而不是 D(指定 day-of-year)。< /li>
  3. 对于解析,单个 u 可以同时满足两位数和四位数的年份表示。同样,单个 M 可以同时满足一位数和两位数的月份。 DateTimeFormatter 以类似方式处理其他字母。
  4. 在这里,您可以使用 y 代替 u,而是使用 I prefer u to y
  5. 您一定已经注意到我没有使用 DateTimeFormatter 作为输出字符串。这是因为 LocalDate#toString 已经以 ISO-8601 格式返回字符串,uuuu-MM-dd(这也是您想要的模式)。

Trail: Date Time 了解有关现代 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