我想以YYYY-MM-DD格式阅读日期。
但如果我输入日期说例如2008-1-1,我想把它读作2008-01-01。
任何人都可以帮助我吗?提前致谢
答案 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)
答案 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.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
注意事项:
y
(指定 year-of-era)而不是 Y
(指定 week-based-year)。< /li>
d
(指定 day-of-month)而不是 D
(指定 day-of-year)。< /li>
u
可以同时满足两位数和四位数的年份表示。同样,单个 M
可以同时满足一位数和两位数的月份。 DateTimeFormatter
以类似方式处理其他字母。y
代替 u
,而是使用 I prefer u
to y
。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 desugaring 和 How to use ThreeTenABP in Android Project。