转换为日期

时间:2008-11-14 13:42:29

标签: java date

我正在尝试创建一些Evenement实例并为它们设置日期:

   for (int i=2004; i<2009; i++){
           evenementen.add(new Evenement("Rock Werchter", "Rock", "Werchter", 200000,
                           (Date)formatter.parse(i+"/07/03")));

但我似乎无法让它发挥作用,

有什么想法吗?

3 个答案:

答案 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.time

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

使用现代 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.timeTrail: Date Time*


* 出于任何原因,如果您必须坚持使用 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