我正在尝试创建一些Evenement实例并为它们设置日期:
for (int i=2004; i<2009; i++){
evenementen.add(new Evenement("Rock Werchter", "Rock", "Werchter", 200000,
(Date)formatter.parse(i+"/07/03")));
但我似乎无法让它发挥作用,
有什么想法吗?
答案 0 :(得分:3)
您可能希望使用日历来创建日期。
for (int i=2004; i<2009; i++) {
Calendar cal = Calendar.getInstance();
cal.clear();
// Calendar.JULY may be different depending on the JDK language
cal.set(i, Calendar.JULY, 3); // Alternatively, cal.set(i, 6, 3);
evenementen.add(new Evenement("Rock Werchter", "Rock", "Werchter", 200000,
cal.getTime()));
}
请注意,月份为零,因此7月为6。
答案 1 :(得分:2)
请注意用于日期格式化程序的语言环境(默认情况下可以Locale.ENGLISH
是您的操作系统是这样设置的,这意味着年份在结尾处,而不是在字符串的开头)
您需要确保将格式化程序构建为:
formatter = new SimpleDateFormat("yyyy/MM/DD");
答案 2 :(得分:2)
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
java.time
的解决方案:import java.time.LocalDate;
import java.time.Month;
public class Main {
public static void main(String[] args) {
for (int i = 2004; i < 2009; i++) {
System.out.println(LocalDate.of(i, Month.JULY, 3));
}
}
}
如果您想通过解析字符串(您在问题中发布的方式)来完成,请使用 DateTimeFormatter
。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u/M/d", Locale.ENGLISH);
for (int i = 2004; i < 2009; i++) {
LocalDate date = LocalDate.parse(i + "/07/03", dtf);
System.out.println(date);
}
}
}
输出:
2004-07-03
2005-07-03
2006-07-03
2007-07-03
2008-07-03
从 modern Date-Time API 中详细了解 java.time
,Trail: Date Time*。
* 出于任何原因,如果您必须坚持使用 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。