0

我刚开始使用 Java (Android) 并陷入了日期格式问题。我有一个小表格,您可以在其中输入项目名称并在日历上选择开始日期。Startdate 和 Projectname 会自动输入到数据库中,然后预定义的 Tasks 会自动输入到数据库中。

  • 任务 1 截止日期为开始日期,
  • 任务 2 是 Startdate 加上 x 天 = DueDate2,
  • 任务 3 是 DueDate2 加上 x 天 = DueDate3

我现在想出了下面的源代码,除了我的日期格式错误之外,一切正常。出于某种原因,我的格式在 newDateStr 中是正确的,但是当我再次将其解析为日期对象时,格式会发生变化并且不正确。我看不到我的错误,有人可以帮忙吗?

我的理解是:

  1. 设置输入日期的日期格式(curFormat)
  2. 设置目标日期格式(postFormater)
  3. 此时解析您的日期,它是一个字符串,将其转换为日期对象(使用 curFormat)
  4. 格式化此日期以获得目标日期格式(使用 postFormater),现在它又是一个字符串
  5. 再次解析它以使其恢复为日历所需的日期
  6. 使用日历实例,setTime(此处为格式化日期)并添加 x 天
  7. 格式化日期以获取目标日期格式(使用 postFormater),现在它又是一个字符串
  8. 因为我再次需要一个日期对象,所以我必须再次解析它。

    // The format of your input date string
    SimpleDateFormat curFormater = new SimpleDateFormat("MM/dd/yyyy"); 
    
    // The format of your target date string
    SimpleDateFormat postFormater = new SimpleDateFormat("dd-MM-yyyy"); 
    
    // The calendar instance which adds a locale to the date
    Calendar cal = Calendar.getInstance();
    
    // Parse the string (pro.getStart()) to return a Date object 
    Date dateObj = curFormater.parse(pro.getStart()); 
    
    // Format the Date dd-MM-yyyy
    String newDateStr = postFormater.format(dateObj);
    
    // Parse the string to return a Date object
    Date Startdate = postFormater.parse(newDateStr);
    
    while (cur.isAfterLast() == false) 
    {
        Integer delayTime = cur.getInt(cur.getColumnIndex("DelayTime"));    
    if (flag == false)
    {
        dateInString = Startdate;
        flag = true;
    }else{
        cal.setTime(dateInString);
        // add the extra days
        cal.add(Calendar.DAY_OF_MONTH, delayTime);
        // Format the Date dd-MM-yyyy
        newDateStr =  postFormater.format(cal.getTime()); 
        // Parse the string to return a Date object
        dateInString =  postFormater.parse(newDateStr);
    
    
    Log.i("newDateStr Format",newDateStr.toString()); // 29-11-2012
    Log.i("dateInString parse",dateInString.toString()); // Thu Nov 29 00:00:00 GMT 2012
    

我希望有人看到我的错误。非常感谢您提前!

4

2 回答 2

0

Calendar每次循环时不要一直将返回转换为字符串。保留一个,然后将延迟累积到位...

SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();

// Set the date once
cal.setTime(fmt.parse(pro.getStart()));

while(!cur.isAfterLast()) {
    // Accumulate additional days
    Integer delayTime = cur.getInt(cur.getColumnIndex("DelayTime"));
    cal.add(Calendar.DAY_OF_MONTH, delayTime);
}

String endDate = fmt.format(cal.getTime());
于 2012-11-26T16:55:28.027 回答
0

一个java.util.Date对象中没有任何格式,也没有你用来解析它的格式的内存。其toString方法的输出,以及您从中获得的输出dateInString.toString()将始终采用您所看到的默认 JDK 格式:Thu Nov 29 00:00:00 GMT 2012

无论何时要显示它,都必须使用格式化程序将其转换为格式化的字符串。你不能这么说“格式化日期对象”。(UI 框架往往内置了自动执行此操作的工具。)

于 2012-11-26T17:00:29.153 回答