Java.util.Date使用问题

qq_33546703 2019-01-17 05:53:52

import java.util.Date;

public class Test1 {
public static void main(String []args){
Date now = new Date();
Date start = addMinutes(now, 24 * 60 * -1);
Date end = addMinutes(start, 24 * 60 * -1);
System.out.println(now);
System.out.println(start);
System.out.println(end);
}

public static Date addMinutes(Date sendDate, int n) {

Date tmp = (Date) sendDate.clone();
try {
tmp.setMinutes(sendDate.getMinutes() + n);
} catch (Exception e) {
return null;
}
return tmp;

}
}

正确答案应该是 now > start > end,但实际的输入结果start == end,然后以debug运行时,在 Date end = addMinutes(start, 24 * 60 * -1)打断点时,又输出正常,请问这是什么原因呢?求大佬解释
...全文
577 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐先生 2019-02-12
  • 打赏
  • 举报
回复
public static Date addMinutes(Date sendDate, int n) {

Date tmp =sendDate;
try {
tmp.setMinutes(sendDate.getMinutes() + n);
} catch (Exception e) {
return null;
}
return tmp;

}
qq_33546703 2019-01-18
  • 打赏
  • 举报
回复
引用 3 楼 叶遮沉阳 的回复:
神奇了!在addMinutes里面加上一行System.out输出:System.out.println(sendDate.hashCode());也能正常输出!!!

public class DateTest {
    public static void main(String []args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now = new Date();
        Date start = addMinutes(now, 24 * 60 * -1);
        Date end = addMinutes(start, 24 * 60 * -1);
        System.out.println(sdf.format(now) + "," +now.hashCode());
        System.out.println(sdf.format(start) + "," +start.hashCode());
        System.out.println(sdf.format(end) + "," +end.hashCode());
    }

    public static Date addMinutes(Date sendDate, int n) {
        System.out.println(sendDate.hashCode());
        Date tmp = (Date) sendDate.clone();
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(tmp);
//        calendar.set(Calendar.MINUTE, n);

        try {
            tmp.setMinutes(sendDate.getMinutes() + n);
        } catch (Exception e) {
            return null;
        }
//        return calendar.getTime();
        return tmp;
    }
}
有哪位大神,这在内存中发生了什么?
是不是觉得很神奇,感觉有点像多线程的行为一样?
叶遮沉阳 2019-01-17
  • 打赏
  • 举报
回复
神奇了!在addMinutes里面加上一行System.out输出:System.out.println(sendDate.hashCode());也能正常输出!!!

public class DateTest {
    public static void main(String []args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now = new Date();
        Date start = addMinutes(now, 24 * 60 * -1);
        Date end = addMinutes(start, 24 * 60 * -1);
        System.out.println(sdf.format(now) + "," +now.hashCode());
        System.out.println(sdf.format(start) + "," +start.hashCode());
        System.out.println(sdf.format(end) + "," +end.hashCode());
    }

    public static Date addMinutes(Date sendDate, int n) {
        System.out.println(sendDate.hashCode());
        Date tmp = (Date) sendDate.clone();
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(tmp);
//        calendar.set(Calendar.MINUTE, n);

        try {
            tmp.setMinutes(sendDate.getMinutes() + n);
        } catch (Exception e) {
            return null;
        }
//        return calendar.getTime();
        return tmp;
    }
}
有哪位大神,这在内存中发生了什么?
叶遮沉阳 2019-01-17
  • 打赏
  • 举报
回复
把tmp.setMinutes(sendDate.getMinutes() + n);改成tmp.setMinutes(tmp.getMinutes() + n);也可以正常输出。

import java.util.Date;
 
public class Test1 {
    public static void main(String []args){
        Date now = new Date();
        Date start = addMinutes(now, 24 * 60 * -1);
        Date end = addMinutes(start, 24 * 60 * -1);
        System.out.println(now);
        System.out.println(start);
        System.out.println(end);
    }
 
    public static Date addMinutes(Date sendDate, int n) {
 
        Date tmp = (Date) sendDate.clone();
        try {
            tmp.setMinutes(tmp.getMinutes() + n);
        } catch (Exception e) {
            return null;
        }
        return tmp;
 
    }
}
叶遮沉阳 2019-01-17
  • 打赏
  • 举报
回复
Date.setMinutes()方法已经过时了,可能存在问题。可以使用Calendar.set(Calendar.MINUTE, n);替代。

public class DateTest {
    public static void main(String []args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now = new Date();
        Date start = addMinutes(now, 24 * 60 * -1);
        Date end = addMinutes(start, 24 * 60 * -1);
        System.out.println(sdf.format(now) + "," +now.hashCode());
        System.out.println(sdf.format(start) + "," +start.hashCode());
        System.out.println(sdf.format(end) + "," +end.hashCode());
    }

    public static Date addMinutes(Date sendDate, int n) {

        Date tmp = (Date) sendDate.clone();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(tmp);
        calendar.set(Calendar.MINUTE, n);

//        try {
//            tmp.setMinutes(sendDate.getMinutes() + n);
//        } catch (Exception e) {
//            return null;
//        }
        return calendar.getTime();

    }
}

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧