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));
+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();
}
}
+1 --------------------编程问答--------------------
这个可以再简化下
--------------------编程问答-------------------- 对。。。不过我以前也是这样写的,可能是我写代码怪癖的毛病,打心眼里不想把时间当成数字来计算。。。 --------------------编程问答--------------------
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()));
--------------------编程问答--------------------
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 --------------------编程问答--------------------
long timeTwentyDaysBefore = System.currentTimeMillis() - 1000l*60*60*24*20;
System.out.println(new java.util.Date(timeTwentyDaysBefore));
+1 --------------------编程问答-------------------- Calendar类可以直接解决。用add方法可以加减时间的任意部分,getTime得到最后的结果(会自动转化不规则的的时间)。4楼就是结果。 --------------------编程问答--------------------
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