用算法实现一个日期的前一天,不得用Calendar类。谁有好的做法,大家讨论一下!谢谢!calendar算法java日期前一天

解决方案 »

  1.   

    日期一般用 java.util.Date 类的对象来表示,里面有getTime方法可以获得一个相对于GMT 1970年1月1日00:00:00的毫秒数(就是一个表示时间的毫秒数)。
    我们都知道,一天有 24*60*60*1000 毫秒,所以,把时间向前推移一天,其实很简单,
    就是把那个长整形的时间(毫秒数),减去一天所用的毫秒数,得到的结果,就是前一天的毫秒数Date now  = new Date();
    long mili = now.getTime() - 24*60*60*1000;
    Date result = new Date(mili);
      

  2.   

    假定输入的日期格式为  yyyy/mm/dd  且为字符串格式
    String  dateStr = "yyyy/mm/dd";利用字符串截取(split)得到:
    String year = "yyyy"
    String month = "mm"
    String day = "dd"
    然后将其转为int类型 yearI,monthI,dayI
    然后dayI = dayI -1;
    if( dayI ==0){
      month = month -1;
      if( month ==0){
        yearI = yearI -1;
        month =12;
      }
      dayI = lastDay(yearI,month)
    //lastDay方法求出 yearI年month月 的天数(最后一天),这个方法网上有很多
    }
    最后将yearI,monthI,dayI按照yyyy/mm/dd格式拼成字符串
    这个方法好笨的,但也是可行的
      

  3.   

    package com.dsb.tool;public class Test { /**
     * @param args
     */
    public int year = 0;
    public int month = 0;
    public int day = 0;
    public boolean flag = false; public static void main(String[] args) {
    System.out.println("前一天:" + new Test().getLastDay("2013/03/01")); } public String getLastDay(String datestr) {
    String[] date = datestr.split("/");
    String dateString = null;
    year = Integer.parseInt(date[0]);
    month = Integer.parseInt(date[1]);
    day = Integer.parseInt(date[2]);
    day = day - 1;
    if (day == 0) {
    month = month - 1;
    if (month == 0) {
    year = year - 1;
    }
    }
    if (month == 0) {
    month = 12;
    }
    if (day == 0) {
    day = getDayByMonth(year, month);
    }
    dateString = year + "/" + month + "/" + day;
    return dateString;
    } public boolean isLeapYear(int year) {
    flag = false;
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    flag = true;
    }
    return flag;
    } public int getDayByMonth(int year, int month) {
    int day = 0;
    int[] daybymonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (month == 2) {
    if (isLeapYear(year)) {
    day = 29;
    } else {
    day = 28;
    }
    } else {
    day = daybymonth[month - 1];
    }
    return day; }}