关于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 | */ |
005 | package com.date_test; |
006 | |
007 | import java.text.DateFormat; |
008 | import java.text.ParseException; |
009 | import java.text.SimpleDateFormat; |
010 | import java.util.Calendar; |
011 | import 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 | */ |
025 | public 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; } }