当前位置:编程学习 > JAVA >>

java 日期推算

java ,已知当前日期,我想知道20天前的日期,java 如何实现?(精确到年月日yyyy-mm-dd)
哪位大神知道的,给小弟讲解下,不胜感激! --------------------编程问答--------------------

   /**
     * 日期相加
     *
     * @param day
     *             天数
     * @return 返回相加后的日期
     */
    public static String addDate(int day) {
 java.util.Calendar c = java.util.Calendar.getInstance();

 c.setTimeInMillis(System.currentTimeMillis() + ((long) day) * 24 * 3600
  * 1000);
 SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
 return df.format(c.getTime());
    }

--------------------编程问答--------------------

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;

class Test {
 public static void main(String args[]) {
  Format format=new SimpleDateFormat("yyyy-MM-dd");
  long time=0;
  int day=30;
  Date today=new Date();
  time=(today.getTime()/1000)+60*60*24*day;
  Date newDate=new Date();
  newDate.setTime(time*1000); 
  System.out.println(format.format(newDate));
 }
}
--------------------编程问答-------------------- 分享一个我自己的代码给你,各种算日期
package com.kx.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil
{
    /**
     * 格式化日期为String型:  yyyy-MM-dd HH:mm:ss
     * @author 阳熙
     * @param inTime
     * @return
     */
    public static String getStringDateTime(Object inTime)
    {
        if(inTime instanceof String)
        {
            inTime = getDateTime((String) inTime);
        }
        SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String outTime = dfTime.format(inTime);
        return outTime;
    }
    
    /**
     * 格式化日期为String型: yyyy-MM-dd
     * @author 阳熙
     * @param inTime
     * @return
     */
    public static String getStringDate(Object inTime)
    {
        if(inTime instanceof String)
        {
            inTime = getDateTime((String) inTime);
        }
        SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd");
        String outTime = dfTime.format(inTime);
        return outTime;
    }
    
    /**
     * 根据字符串得到yyyy-MM-dd HH:mm:ss格式日期
     * @param dateString
     * @return
     */
    public static Date getDateTime(String dateString)
    {
        DateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=null;
        try {
            date = df.parse(dateString);
        } catch (ParseException e) 
        {
            e.printStackTrace();
        }
        return date;
    }
    
    /**
     * 根据字符串得到yyyy-MM-dd格式日期
     * @param dateString
     * @return
     */
    public static Date getDate(String dateString)
    {
        DateFormat dd=new SimpleDateFormat("yyyy-MM-dd");
        Date date=null;
        try {
            date = dd.parse(dateString);
        } catch (ParseException e) 
        {
            e.printStackTrace();
        }
        return date;
    }
    
/**
 * 得到指定日期的星期几
 * @param date
 * @return
 */
public static int getWeek(Date date){
//        SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
//        String week = sdf.format(date);
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return cal.get(Calendar.DAY_OF_WEEK);
    }

/**
 * 得到指定日期是当月第几日
 * @author 阳熙
 * @param date
 * @return
 */
public static int getMonth(Date date){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return cal.get(Calendar.DAY_OF_MONTH);
}

/**
 * 将String日期转化为Long型,精确到毫秒值,如果转换失败,则为-1;
 * @param stringDate
 * @return
 */
public static Long getLongDate(String stringDate)
{
SimpleDateFormat dfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long longDate = -1L;
try
{
longDate = dfTime.parse(stringDate).getTime();
}
catch (ParseException e)
{
System.out.println("转换日期格式出错!");
e.printStackTrace();
}
return longDate;
}

/**
 * @param n
 * @return 当前日期的后n天
 */
public static String afterNowDay(int n)
{   
Calendar c=Calendar.getInstance();
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
c.setTime(new Date());
c.add(Calendar.DATE,n);
Date d2=c.getTime();
String s=df.format(d2);
return s;
}
/**
 * @param n
 * @return 当前日期的前n天
 */
public static String beforNowDay(int n)
{   
Calendar c=Calendar.getInstance();
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
c.setTime(new Date());
c.add(Calendar.DATE,-n);
Date d2=c.getTime();
String s=df.format(d2);
return s;
}

/**
 * 获得指定时间date前n天日期
 * @author 阳熙
 * @param n
 * @return
 */
public static String beforTheDay(String date,int n)
{   
    Calendar c=Calendar.getInstance();
    DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
    Date tdate = null;
        try
        {
            tdate = df.parse(date);
        }
        catch (ParseException e)
        {
            System.out.println("异常信息:"+"转换时间异常!");
            e.printStackTrace();
        }
    c.setTime(tdate);
    c.add(Calendar.DATE,-n);
    Date d2=c.getTime();
    String s=df.format(d2);
    return s;
}

}
--------------------编程问答--------------------
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(calendar.getTime()));
--------------------编程问答--------------------
long timeTwentyDaysBefore = System.currentTimeMillis() - 1000l*60*60*24*20;
System.out.println(new java.util.Date(timeTwentyDaysBefore));
--------------------编程问答--------------------
引用 4 楼 rui888 的回复:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(calendar.getTime()));

+1,用java.util.Calendar这个好 --------------------编程问答-------------------- 楼上两位已经给你了现成的代码了,不过我觉得太过麻烦,给我写以前用过的一个日期处理工具吧!另外,对于这种小问题,最好要自己试着写一写。。。
public class DateUtil {

/**
 * 得出两个日期之间相差的天数
 * @param date1 前一个日期
 * @param date2 后一个日期
 * @return
 */
public static int getDays(Date date1, Date date2) {
Calendar calendar = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar.setTime(date1);
calendar2.setTime(date2);
int days = 0;
while(calendar.compareTo(calendar2) == -1){
calendar.add(Calendar.DATE, 1);
days++;
}
while(calendar.compareTo(calendar2) > 0){
calendar.add(Calendar.DATE, -1);
days--;
}
return days;
}

/**
 * 得到与date日期相差time天的日期
 * @param date 给出的日期
 * @param time 相差的天数,正的为date前time天的日期,负的为date后time天的日期
 * @return
 */
public static Date getDateAfterDate(Date date, int time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, time);
date = calendar.getTime();
return date;
}

/**
 * 由字符串格式化输出日期(yyyy-mm-dd)
 * @param date
 * @return
 */
public static Date formatDate(String date) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date time = null;
try {
time = df.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return time;
}
/**
 * 格式化输出日期的字符串(yyyy-mm-dd)
 * @param date
 * @return
 */
public static String formatDateToString(Date date) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String time = df.format(date);
return time;
}

/**
 * 得到当天的日期
 * @return
 */
public static Date getNowDate(){
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 0);
return calendar.getTime();
}
}
--------------------编程问答--------------------
引用 4 楼 rui888 的回复:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(calendar.getTime()));

+1 --------------------编程问答--------------------
引用 7 楼 hjw506848887 的回复:
楼上两位已经给你了现成的代码了,不过我觉得太过麻烦,给我写以前用过的一个日期处理工具吧!另外,对于这种小问题,最好要自己试着写一写。。。
public class DateUtil {

/**
 * 得出两个日期之间相差的天数
 * @param date1 前一个日期
 * @param date2 后一个日期
 * @return
 */
public static int getDays(Date date1, Date date2) {
Calendar calendar = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar.setTime(date1);
calendar2.setTime(date2);
int days = 0;
while(calendar.compareTo(calendar2) == -1){
calendar.add(Calendar.DATE, 1);
days++;
}
while(calendar.compareTo(calendar2) > 0){
calendar.add(Calendar.DATE, -1);
days--;
}
return days;
}
}

这个可以再简化下

public static int getDays(Date date1, Date date2) {
int day = 0;
long times = date1.getTime() - date2.getTime();
day = (int)times/86400000;
return day;
}
--------------------编程问答--------------------
引用 9 楼 lishikai500 的回复:
Quote: 引用 7 楼 hjw506848887 的回复:

楼上两位已经给你了现成的代码了,不过我觉得太过麻烦,给我写以前用过的一个日期处理工具吧!另外,对于这种小问题,最好要自己试着写一写。。。
public class DateUtil {

/**
 * 得出两个日期之间相差的天数
 * @param date1 前一个日期
 * @param date2 后一个日期
 * @return
 */
public static int getDays(Date date1, Date date2) {
Calendar calendar = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar.setTime(date1);
calendar2.setTime(date2);
int days = 0;
while(calendar.compareTo(calendar2) == -1){
calendar.add(Calendar.DATE, 1);
days++;
}
while(calendar.compareTo(calendar2) > 0){
calendar.add(Calendar.DATE, -1);
days--;
}
return days;
}
}

这个可以再简化下

public static int getDays(Date date1, Date date2) {
int day = 0;
long times = date1.getTime() - date2.getTime();
day = (int)times/86400000;
return day;
}
对。。。不过我以前也是这样写的,可能是我写代码怪癖的毛病,打心眼里不想把时间当成数字来计算。。。 --------------------编程问答--------------------
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");        System.out.println(df.format(calendar.getTime()));

--------------------编程问答--------------------
引用 4 楼 rui888 的回复:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(calendar.getTime()));

+1 --------------------编程问答-------------------- java.util.GregorianCalendar  类可以实现,LZ自行查看API --------------------编程问答-------------------- 建议学习下joda-time,非常使用的时间框架,很容易学,20天前,一句代码的事情就可以解决 --------------------编程问答-------------------- jodatime:http://www.oschina.net/question/12_7643  --------------------编程问答--------------------
引用 5 楼 huxiweng 的回复:
long timeTwentyDaysBefore = System.currentTimeMillis() - 1000l*60*60*24*20;
System.out.println(new java.util.Date(timeTwentyDaysBefore));

+1 --------------------编程问答-------------------- Calendar类可以直接解决。用add方法可以加减时间的任意部分,getTime得到最后的结果(会自动转化不规则的的时间)。4楼就是结果。 --------------------编程问答--------------------
引用 6 楼 suciver 的回复:
Quote: 引用 4 楼 rui888 的回复:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -20);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(calendar.getTime()));

+1,用java.util.Calendar这个好
 顶 --------------------编程问答--------------------


//当前日期加几天或者减几天
public static Date addday(String Date,int day){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
Date date=null;
try {
date = format.parse(Date);
} catch (ParseException e) {
e.printStackTrace();
}
//当前日期加几天
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, day);
//System.out.println("到期:"+cal.getTime().toLocaleString());
return cal.getTime();
}
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,