最近在写信息提醒发现日期的确定和距离日期很让人头疼于是总结了一下

主要学习的日期操作主要是-----获取日期字段(年、月、日、年中的天数、年中的周数等)、计算两个时间的间隔日期(年、月、天)、根据开始时间间隔时间计算结束时间。

       关于Calendar日历的字段值,我从JDK中摘抄了一些我认为比较重要的,如下:

常规的年月日时分秒:
static int YEAR
          指示年的 get 和 set 的字段数字。
static int MONTH
          指示月份的 get 和 set 的字段数字。
static int DATE
          get 和 set 的字段数字,指示一个月中的某天。
static int HOUR
          get 和 set 的字段数字,指示上午或下午的小时。
static int MINUTE
          get 和 set 的字段数字,指示一小时中的分钟
static int SECOND
          get 和 set 的字段数字,指示一分钟中的秒。

比较有用的几个字段:
static int DAY_OF_YEAR
          get 和 set 的字段数字,指示当前年中的天数。
static int WEEK_OF_YEAR
          get 和 set 的字段数字,指示当前年中的星期数。
static int WEEK_OF_MONTH
          get 和 set 的字段数字,指示当前月中的星期数。
static int DAY_OF_WEEK
          get 和 set 的字段数字,指示一个星期中的某天。

下面是关于日期计算的测试代码,虽然较长,但是调理很清晰。

001/**
002 * 日期类Date、Calendar测试类
003 
004 */
005package com.date_test;
006  
007import java.text.DateFormat;
008import java.text.ParseException;
009import java.text.SimpleDateFormat;
010import java.util.Calendar;
011import java.util.Date;
012  
013/**
014 * @author wkupaochuan
015 * @time Jun 14, 2012
016 * @version V 1.0
017 
018 * 实现的接口如下:
019 * 1---根据开始时间和间隔天数计算结束时间 Date calculateEndDate(Date sDate, int days)
020 * 2---根据开始时间、结束时间、间隔类型(年、月、日)计算间隔时间 int calInterval(Date sDate, Date eDate, String type)
021 * 3---输出日历实例(当前时间)的各个字段值 void printFields(Calendar cNow)
022 * 4---判定某个年份是否是闰年 boolean isLeapYear(int year)
023 * 5---比较两个日期的大小 int compareDate(Date sDate, Date eDate)
024 */
025public class Calendar_test {
026      
027    public static void main(String agrs[])
028    {
029        //获取日历实例并赋予当前时间
030        Calendar cNow = Calendar.getInstance();
031        cNow.setTime(new Date());
032        //输出日历相关字段
033        printFields(cNow);
034          
035        /*计算两个日期的时间间隔*/
036        //开始时间
037        Date sDate = new Date();
038        //结束时间
039        try {
040            Date eDate = (new SimpleDateFormat("yyyy-MM-dd")).parse("2012-05-29");
041            //计算结果并输出
042            System.out.println("今天与2020-05-29相隔:" + calInterval(sDate, eDate, "d") + "天");
043        } catch (ParseException e) {
044            // TODO Auto-generated catch block
045            e.printStackTrace();
046        }
047          
048        /*计算结束日期并输出*/
049        SimpleDateFormat df = (SimpleDateFormat)DateFormat.getInstance();
050        df.applyPattern("yyyy-MM-dd");
051        System.out.println("从几天开始计算,2天后是:" + df.format(calculateEndDate(sDate, 2)));
052    }
053      
054    /**
055     * 根据起始日期和间隔时间计算结束日期
056     
057     * @param sDate开始时间
058     
059     * @param days间隔时间
060     
061     * @return 结束时间
062     * */
063    public static Date calculateEndDate(Date sDate, int days)
064    {
065        //将开始时间赋给日历实例
066        Calendar sCalendar = Calendar.getInstance();
067        sCalendar.setTime(sDate);
068        //计算结束时间
069        sCalendar.add(Calendar.DATE, days);
070        //返回Date类型结束时间
071        return sCalendar.getTime();
072    }
073      
074    /**
075     * 计算两个日期的时间间隔
076     
077     * @param sDate开始时间
078     
079     * @param eDate结束时间
080     
081     * @param type间隔类型("Y/y"--年  "M/m"--月  "D/d"--日)
082     
083     * @return interval时间间隔
084     * */
085    private static int calInterval(Date sDate, Date eDate, String type)
086    {
087        //时间间隔,初始为0
088        int interval = 0;
089          
090        /*比较两个日期的大小,如果开始日期更大,则交换两个日期*/
091        //标志两个日期是否交换过
092        boolean reversed = false;
093        if(compareDate(sDate, eDate) > 0)
094        {
095            Date dTest = sDate;
096            sDate = eDate;
097            eDate = dTest;
098            //修改交换标志
099            reversed = true;
100        }
101          
102        /*将两个日期赋给日历实例,并获取年、月、日相关字段值*/
103        Calendar sCalendar = Calendar.getInstance();
104        sCalendar.setTime(sDate);
105        int sYears = sCalendar.get(Calendar.YEAR);
106        int sMonths = sCalendar.get(Calendar.MONTH);
107        int sDays = sCalendar.get(Calendar.DAY_OF_YEAR);
108          
109        Calendar eCalendar = Calendar.getInstance();
110        eCalendar.setTime(eDate);
111        int eYears = eCalendar.get(Calendar.YEAR);
112        int eMonths = eCalendar.get(Calendar.MONTH);
113        int eDays = eCalendar.get(Calendar.DAY_OF_YEAR);
114          
115        //年
116        if(cTrim(type).equals("Y") || cTrim(type).equals("y"))
117        {
118            interval = eYears - sYears;
119            if(eMonths < sMonths)
120            {
121                --interval;
122            }
123        }
124        //月
125        else if(cTrim(type).equals("M") || cTrim(type).equals("m"))
126        {
127            interval = 12 * (eYears - sYears);
128            interval += (eMonths - sMonths);
129        }
130        //日
131        else if(cTrim(type).equals("D") || cTrim(type).equals("d"))
132        {
133            interval = 365 * (eYears - sYears);
134            interval += (eDays - sDays);
135            //除去闰年天数
136            while(sYears < eYears)
137            {
138                if(isLeapYear(sYears))
139                {
140                    --interval;
141                }
142                ++sYears;
143            }
144        }
145        //如果开始日期更大,则返回负值
146        if(reversed)
147        {
148            interval = -interval;
149        }
150        //返回计算结果
151        return interval;
152    }
153      
154    /**
155     * 输出日历相关字段(当前日期)
156     
157     * @param cNow当前时间
158     
159     * @return null
160     
161     * 各个字段值都可以用get(field)得到,也可以用set(field, value)函数修改
162     * */
163     private static void printFields(Calendar cNow)
164    {
165        //先用Date类型输出验证
166        SimpleDateFormat df = (SimpleDateFormat)DateFormat.getInstance();
167        df.applyPattern("yyyy-MM-dd  HH:mm:ss");
168        System.out.println("标准日期:" + df.format(new Date()));
169        //逐个输出相关字段值
170        System.out.print("年份:" + cNow.get(Calendar.YEAR) + "\t");
171        //月份有问题(这里的月份开始计数为0)
172        System.out.print("月份:" + cNow.get(Calendar.MONTH) + "\t");
173        System.out.print("日期:" + cNow.get(Calendar.DATE) + "\t");
174        System.out.print("小时:" + cNow.get(Calendar.HOUR) + "\t");
175        System.out.print("分钟:" + cNow.get(Calendar.MINUTE) + "\t");
176        System.out.println("秒钟:" + cNow.get(Calendar.SECOND));
177        //本年的第几天,在计算时间间隔的时候有用
178        System.out.println("一年中的天数:" + cNow.get(Calendar.DAY_OF_YEAR));
179        System.out.println("一年中的周数:" + cNow.get(Calendar.WEEK_OF_YEAR));
180        //即本月的第几周
181        System.out.println("一月中的周数:" + cNow.get(Calendar.WEEK_OF_MONTH));
182        //即一周中的第几天(这里是以周日为第一天的)
183        System.out.println("一周中的天数:" + cNow.get(Calendar.DAY_OF_WEEK));
184    }
185       
186     /**
187      * 判定某个年份是否是闰年
188      
189      * @param year待判定的年份
190      
191      * @return 判定结果
192      * */
193     private static boolean isLeapYear(int year)
194     {
195         return (year%400 == 0 || (year%4 == 0 && year%100 != 0));
196     }
197       
198    /**
199    
200    * 字符串去除两头空格,如果为空,则返回"",如果不空,则返回该字符串去掉前后空格
201    
202    * @param tStr输入字符串
203    
204    * @return 如果为空,则返回"",如果不空,则返回该字符串去掉前后空格
205    
206    */
207    public static String cTrim(String tStr) 
208    {
209        String ttStr = "";
210        if (tStr == null) 
211        {} 
212        else 
213        {
214            ttStr = tStr.trim();
215        }
216        return ttStr;
217    }
218      
219    /**
220     * 比较两个Date类型的日期大小
221     
222     * @param sDate开始时间
223     
224     * @param eDate结束时间
225     
226     * @return result返回结果(0--相同  1--前者大  2--后者大)
227     * */
228    private static int compareDate(Date sDate, Date eDate)
229    {
230        int result = 0;
231        //将开始时间赋给日历实例
232        Calendar sC = Calendar.getInstance();
233        sC.setTime(sDate);
234        //将结束时间赋给日历实例
235        Calendar eC = Calendar.getInstance();
236        eC.setTime(eDate);
237        //比较
238        result = sC.compareTo(eC);
239        //返回结果
240        return result;
241    }
242  
243}

将字符串转化为时间类型

import java.util.Date;
import java.text.SimpleDateFormat;
class time {
 public static void main(String[] sg)throws Exception{
  String brithday=new String("1991-02-02");
  SimpleDateFormat a=new SimpleDateFormat("yyyy-MM-dd");
  Date b=a.parse(brithday);
  System.out.println("将字符串转化为时间是"+b);
  
 }
}

java怎样获得当前时间的前几天


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

public class Admin {
	public static void main(String[] args) {

		Format f = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		Calendar c = Calendar.getInstance();

		System.out.println("当前时间:" + f.format(c.getTime()));

		// 前一天
		c = test(c, -1);
		System.out.println("  前一天:" + f.format(c.getTime()));

		// 后两天
		test(c, 2);
		System.out.println("  后两天:" + f.format(c.getTime()));
	}

	private static Calendar test(Calendar c, int day) {
		c.add(Calendar.DATE, day);
		return c;
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值