Java 之 Date 和 Calendar 实例

[java] view plaincopy print?
  1. package com.homer.learn;
  2. import java.text.DateFormat;
  3. import java.text.ParsePosition;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Calendar;
  6. import java.util.Date;
  7. import java.util.GregorianCalendar;
  8. public class TimeTest {
  9. public static void main(String[] args) {
  10. TimeTest tt = new TimeTest();
  11. System.out.println("\n当前日期: ");
  12. System.out.println(tt.getNowTime());                    // 获取当前时间
  13. System.out.println(tt.getNowTime2());                   // 获取当前时间
  14. System.out.println(tt.getNowTime3());                   // 获取当前时间
  15. System.out.println("\n计算周: ");
  16. System.out.println(tt.getDaysOfNow2SundayInWeek());     // 获取当前日期与本周日的相差天数
  17. System.out.println(tt.getDateOfMondayInWeek());         // 获取本周一的日期
  18. System.out.println(tt.getDateOfSaturdayInWeek());       // 获取本周六的日期
  19. System.out.println(tt.getDateOfSaturdayInNextWeek());   // 获取下周一的日期
  20. System.out.println(tt.getDateOfSaturdayInLastWeek());   // 获取上周一的日期
  21. System.out.println("\n计算月: ");
  22. System.out.println(tt.getFirstDayOfMonth());            // 获取当月的第一天
  23. System.out.println(tt.getLastDayOfMonth());             // 获取当月最后一天
  24. System.out.println(tt.getFirstDayOfPreviousMonth());    // 获取上月第一天
  25. System.out.println(tt.getLastDayOfPreviousMonth());     // 获取上月最后一天
  26. System.out.println(tt.getFirstDayOfNextMonth());        // 获取下月第一天
  27. System.out.println(tt.getLastDayOfNextMonth());         // 获取下月最后一天
  28. System.out.println("\n计算年: ");
  29. System.out.println(tt.getFirstDayOfYear());             // 获取本年的第一天
  30. System.out.println(tt.getLastDayOfYear());              // 获取本年最后一天
  31. System.out.println(tt.getFirstDayOfPreviousYear());     // 获取上年的第一天
  32. System.out.println(tt.getLastDayOfPreviousYear());      // 获取上年最后一天
  33. System.out.println(tt.getFirstDayOfNextYear());         // 获取下年的第一天
  34. System.out.println(tt.getLastDayOfNextYear());          // 获取下年最后一天
  35. System.out.println(tt.getDaysOfYear());                 // 获取本年的天数
  36. System.out.println("\n计算季度: ");
  37. System.out.println(tt.getSeasonOfMonth());              // 获取当前月的季度
  38. System.out.println(tt.getLastDayOfNow());               // 获取当前天所在月份的天数
  39. System.out.println(tt.isLeapYear(2012));                // 判断是否是润年
  40. System.out.println("\n日期格式转换与计算: ");
  41. System.out.println(tt.getDateFromStr("2012-06-20"));    // 将字符串时间格式 yyyy-MM-dd,转换成Date类型
  42. System.out.println(tt.getWeek("2012-06-20"));           // 根据一个日期,返回是星期几的字符串
  43. System.out.print("2012-06-02 -> 2012-06-12间隔天数:");   // 计算两个日期间的间隔天数
  44. System.out.println(tt.getDaysFromTwoDate("2012-06-02", "2012-06-12"));
  45. }
  46. // 获取当前时间
  47. public String getNowTime() {
  48. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  49. Date now = new Date();
  50. return sDateFormat.format(now);
  51. }
  52. public String getNowTime2() {
  53. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  54. Date now = new Date(System.currentTimeMillis());
  55. return sDateFormat.format(now);
  56. }
  57. public String getNowTime3() {
  58. StringBuilder strBuildNow = new StringBuilder();
  59. Calendar calendar = Calendar.getInstance();
  60. int year = calendar.get(Calendar.YEAR);
  61. int month = calendar.get(Calendar.MONTH) + 1;
  62. int day = calendar.get(Calendar.DAY_OF_MONTH);
  63. int hour = calendar.get(Calendar.HOUR_OF_DAY);
  64. int minute = calendar.get(Calendar.MINUTE);
  65. int second = calendar.get(Calendar.SECOND);
  66. int millissecond = calendar.get(Calendar.MILLISECOND);
  67. strBuildNow.append(year + "-");
  68. strBuildNow.append(month + "-");
  69. strBuildNow.append(day + " ");
  70. strBuildNow.append(hour + ":");
  71. strBuildNow.append(minute + ":");
  72. strBuildNow.append(second + ".");
  73. strBuildNow.append(millissecond);
  74. return strBuildNow.toString();
  75. }
  76. // 获取当前日期与本周日的相差天数
  77. public int getDaysOfNow2SundayInWeek() {
  78. Calendar calendar = Calendar.getInstance();
  79. int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;     // 减一天,周一为1,符合中国人习惯。Sunday - 1; Monday - 2; Saturday - 7
  80. if(dayOfWeek == 0) {        // 周日
  81. return 0;
  82. } else {
  83. return 0 - dayOfWeek;
  84. }
  85. }
  86. // 获取本周一的日期
  87. public String getDateOfMondayInWeek(){
  88. int day = this.getDaysOfNow2SundayInWeek() + 1; // 加1,即周一离本周日的间隔天数
  89. GregorianCalendar gCalendar = new GregorianCalendar();
  90. gCalendar.add(GregorianCalendar.DATE, day);     // 计算与本周一相差的时间间隔
  91. Date curDay = gCalendar.getTime();
  92. DateFormat dateFormat = DateFormat.getInstance();
  93. String dateOfMonday = dateFormat.format(curDay);
  94. return dateOfMonday;
  95. }
  96. // 获取本周六的日期
  97. public String getDateOfSaturdayInWeek(){
  98. int day = this.getDaysOfNow2SundayInWeek() + 6; // 加6,即周六离本周日的间隔天数
  99. GregorianCalendar gCalendar = new GregorianCalendar();
  100. gCalendar.add(GregorianCalendar.DATE, day);     // 计算与本周六相差的时间间隔
  101. Date curDay = gCalendar.getTime();
  102. DateFormat dateFormat = DateFormat.getInstance();
  103. String dateOfMonday = dateFormat.format(curDay);
  104. return dateOfMonday;
  105. }
  106. // 获取上周一的日期
  107. public String getDateOfSaturdayInLastWeek(){
  108. int day = this.getDaysOfNow2SundayInWeek() - 1; // 减1,即上周一离本周日的间隔天数
  109. GregorianCalendar gCalendar = new GregorianCalendar();
  110. gCalendar.add(GregorianCalendar.DATE, day);     // 计算与上周一相差的时间间隔
  111. Date curDay = gCalendar.getTime();
  112. DateFormat dateFormat = DateFormat.getInstance();
  113. String dateOfMonday = dateFormat.format(curDay);
  114. return dateOfMonday;
  115. }
  116. // 获取下周一的日期
  117. public String getDateOfSaturdayInNextWeek(){
  118. int day = this.getDaysOfNow2SundayInWeek() + 8; // 加8,即下周一离本周日的间隔天数
  119. GregorianCalendar gCalendar = new GregorianCalendar();
  120. gCalendar.add(GregorianCalendar.DATE, day);     // 计算与下周一相差的时间间隔
  121. Date curDay = gCalendar.getTime();
  122. DateFormat dateFormat = DateFormat.getInstance();
  123. String dateOfMonday = dateFormat.format(curDay);
  124. return dateOfMonday;
  125. }
  126. // 获取当月第一天
  127. public String getFirstDayOfMonth() {
  128. String strFirstDay = "";
  129. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  130. Calendar calendar = Calendar.getInstance();
  131. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  132. strFirstDay = sDateFormat.format(calendar.getTime());
  133. return strFirstDay;
  134. }
  135. // 获取当月最后一天
  136. public String getLastDayOfMonth() {
  137. String strLastDay = "";
  138. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  139. Calendar calendar = Calendar.getInstance();
  140. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  141. calendar.add(Calendar.MONDAY, 1);   // 加一个月,变为下月的1号
  142. calendar.add(Calendar.DATE, -1);    // 减去一天,变为当前月的最后一天
  143. strLastDay = sDateFormat.format(calendar.getTime());
  144. return strLastDay;
  145. }
  146. // 获取上月第一天
  147. public String getFirstDayOfPreviousMonth() {
  148. String strFirstDay = "";
  149. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  150. Calendar calendar = Calendar.getInstance();
  151. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  152. calendar.add(Calendar.MONDAY, -1);  // 减一个月,变为上月的1号
  153. strFirstDay = sDateFormat.format(calendar.getTime());
  154. return strFirstDay;
  155. }
  156. // 获取上月最后一天
  157. public String getLastDayOfPreviousMonth() {
  158. String strLastDay = "";
  159. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  160. Calendar calendar = Calendar.getInstance();
  161. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  162. calendar.add(Calendar.DATE, -1);    // 减一天,变为上月的1号
  163. strLastDay = sDateFormat.format(calendar.getTime());
  164. return strLastDay;
  165. }
  166. public String getLastDayOfPreviousMonth2() {
  167. String strLastDay = "";
  168. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  169. Calendar calendar = Calendar.getInstance();
  170. calendar.add(Calendar.MONDAY, -1);  // 减一个月
  171. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  172. calendar.roll(Calendar.DATE, -1);   // 把日期回滚一天,也就是本月最后一天
  173. strLastDay = sDateFormat.format(calendar.getTime());
  174. return strLastDay;
  175. }
  176. // 获取下月第一天
  177. public String getFirstDayOfNextMonth() {
  178. String strFirstDay = "";
  179. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  180. Calendar calendar = Calendar.getInstance();
  181. calendar.add(Calendar.MONTH, 1);    // 加一个月
  182. calendar.set(Calendar.DATE, 1);     // 设置当前月第一天
  183. strFirstDay = sDateFormat.format(calendar.getTime());
  184. return strFirstDay;
  185. }
  186. // 获取下月最后一天
  187. public String getLastDayOfNextMonth() {
  188. String strLastDay = "";
  189. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  190. Calendar calendar = Calendar.getInstance();
  191. calendar.set(Calendar.DATE, 1);     // 设置当前月的1号
  192. calendar.add(Calendar.MONDAY, 2);   // 加两个月,变为下下月的1号
  193. calendar.add(Calendar.DATE, -1);    // 减一天,变为下月的最后一天
  194. strLastDay = sDateFormat.format(calendar.getTime());
  195. return strLastDay;
  196. }
  197. public String getLastDayOfNextMonth2(){
  198. String strLastDay = "";
  199. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  200. Calendar calendar = Calendar.getInstance();
  201. calendar.add(Calendar.MONTH, 1);    // 加1个月
  202. calendar.set(Calendar.DATE, 1);     // 把日期设置为当月第1天
  203. calendar.roll(Calendar.DATE, -1);   // 日期回滚1天,也就是本月最后1天
  204. strLastDay = sDateFormat.format(calendar.getTime());
  205. return strLastDay;
  206. }
  207. // 获取本年的第一天
  208. public String getFirstDayOfYear(){
  209. String strFirstDay = "";
  210. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  211. Calendar calendar = Calendar.getInstance();
  212. calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天
  213. strFirstDay = sDateFormat.format(calendar.getTime());
  214. return strFirstDay;
  215. }
  216. // 获取本年的最后一天
  217. public String getLastDayOfYear(){
  218. String strLastDay = "";
  219. Calendar calendar = Calendar.getInstance();
  220. strLastDay = calendar.get(Calendar.YEAR) + "-12-31";
  221. return strLastDay;
  222. }
  223. // 获取上年的第一天
  224. public String getFirstDayOfPreviousYear(){
  225. String strFirstDay = "";
  226. Calendar calendar = Calendar.getInstance();
  227. strFirstDay = (calendar.get(Calendar.YEAR) - 1) + "-01-01";
  228. return strFirstDay;
  229. }
  230. // 获取上年的最后一天
  231. public String getLastDayOfPreviousYear(){
  232. String strLastDay = "";
  233. Calendar calendar = Calendar.getInstance();
  234. strLastDay = (calendar.get(Calendar.YEAR) - 1) + "-12-31";
  235. return strLastDay;
  236. }
  237. // 获取下年的第一天
  238. public String getFirstDayOfNextYear(){
  239. String strFirstDay = "";
  240. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  241. Calendar calendar = Calendar.getInstance();
  242. calendar.add(Calendar.YEAR, 1);             // 加一年
  243. calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天
  244. strFirstDay = sDateFormat.format(calendar.getTime());
  245. return strFirstDay;
  246. }
  247. // 获取下年的最后一天
  248. public String getLastDayOfNextYear(){
  249. String strLastDay = "";
  250. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  251. Calendar calendar = Calendar.getInstance();
  252. calendar.add(Calendar.YEAR, 1);             // 加一年
  253. calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置当年第一天
  254. calendar.roll(Calendar.DAY_OF_YEAR, -1);    // 回滚到当年最后一天
  255. strLastDay = sDateFormat.format(calendar.getTime());
  256. return strLastDay;
  257. }
  258. // 获取本年的天数
  259. public String getDaysOfYear(){
  260. int year = 0;
  261. int days = 0;
  262. Calendar calendar = Calendar.getInstance();
  263. calendar.set(Calendar.DAY_OF_YEAR, 1);      // 设置日期为当年第一天
  264. calendar.roll(Calendar.DAY_OF_YEAR, -1);    // 把日期回滚一天
  265. year = calendar.get(Calendar.YEAR);
  266. days = calendar.get(Calendar.DAY_OF_YEAR);
  267. return (days + " in " + year);
  268. }
  269. // 获取当前月的季度
  270. public String getSeasonOfMonth(){
  271. String strSeason = "";
  272. int year, month, day;
  273. int season = 1;
  274. int array[][] = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} };
  275. Calendar calendar = Calendar.getInstance();
  276. year = calendar.get(Calendar.YEAR);
  277. month = calendar.get(Calendar.MONDAY) + 1;
  278. day = calendar.get(Calendar.DAY_OF_MONTH);
  279. switch (month) {
  280. case 1:
  281. case 2:
  282. case 3:
  283. season = 1;
  284. break;
  285. case 4:
  286. case 5:
  287. case 6:
  288. season = 2;
  289. break;
  290. case 7:
  291. case 8:
  292. case 9:
  293. season = 3;
  294. break;
  295. case 10:
  296. case 11:
  297. case 12:
  298. season = 4;
  299. break;
  300. default:
  301. season = 1;
  302. break;
  303. }
  304. int start_month = array[season-1][0];
  305. int end_month = array[season-1][2];
  306. strSeason = year + "-" + month + "-" +day;
  307. strSeason += " in [ " + year + "-" + start_month + " : " + year + "-" + end_month + " ]";
  308. return strSeason;
  309. }
  310. // 获取当前天所在月份的天数
  311. public String getLastDayOfNow(){
  312. String strLastDay = "";
  313. int year, month, day;
  314. int days = 0;
  315. Calendar calendar = Calendar.getInstance();
  316. year = calendar.get(Calendar.YEAR);
  317. month = calendar.get(Calendar.MONTH) + 1;
  318. day = calendar.get(Calendar.DAY_OF_MONTH);
  319. switch (month) {
  320. case 1:
  321. case 3:
  322. case 5:
  323. case 7:
  324. case 8:
  325. case 10:
  326. case 12:
  327. days = 31;
  328. break;
  329. case 4:
  330. case 6:
  331. case 9:
  332. case 11:
  333. days = 30;
  334. break;
  335. case 2:
  336. if (isLeapYear(year)) {
  337. days = 29;
  338. } else {
  339. days = 28;
  340. }
  341. break;
  342. default:
  343. days = 0;
  344. break;
  345. }
  346. strLastDay = days + " in [ " + year + "-" + month + "-" + day + " ]";
  347. return strLastDay;
  348. }
  349. // 判断是否是润年
  350. public boolean isLeapYear(int year){
  351. return (year%4 == 0 && year%100 != 0) || (year%400 == 0);
  352. }
  353. // 将字符串时间格式 yyyy-MM-dd,转换成Date类型
  354. public Date getDateFromStr(String txtDate) {
  355. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  356. ParsePosition pos = new ParsePosition(0);
  357. Date date = sDateFormat.parse(txtDate, pos);
  358. return date;
  359. }
  360. // 根据一个日期,返回是星期几的字符串
  361. public String getWeek(String txtDate) {
  362. Date date = getDateFromStr(txtDate);
  363. Calendar calendar = Calendar.getInstance();
  364. calendar.setTime(date);
  365. String week = new SimpleDateFormat("EEEE").format(date);
  366. return week;
  367. }
  368. // 计算两个日期间的间隔天数
  369. public long getDaysFromTwoDate(String txtDate1, String txtDate2) {
  370. if(txtDate1 == null || txtDate1.equals("")) {
  371. return 0;
  372. }
  373. if(txtDate2 == null || txtDate2.equals("")) {
  374. return 0;
  375. }
  376. SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");
  377. long days = 0;
  378. try {
  379. Date date1 = sDateFormat.parse(txtDate1);
  380. Date date2 = sDateFormat.parse(txtDate2);
  381. days = (date2.getTime() - date1.getTime())/(24*60*60*1000);     // 通过getTime()方法,把时间Date转换成毫秒格式Long类型,进行计算
  382. } catch (Exception e) {
  383. System.out.println(e.getMessage());
  384. }
  385. return days;
  386. }
  387. }

运行结果:

当前日期: 
2012-03-07
2012-03-07 12:30:11
2012-3-7 12:30:11.101

计算周: 
-3
3/5/12 12:30 PM
3/10/12 12:30 PM
3/12/12 12:30 PM
3/3/12 12:30 PM

计算月: 
2012-03-01
2012-03-31
2012-02-01
2012-02-29
2012-04-01
2012-04-30

计算年: 
2012-01-01
2012-12-31
2011-01-01
2011-12-31
2013-01-01
2013-12-31
366 in 2012

计算季度: 
2012-3-7 in [ 2012-1 : 2012-3 ]
31 in [ 2012-3-7 ]
true

日期格式转换与计算: 
Wed Jun 20 00:00:00 CST 2012
Wednesday
2012-06-02 -> 2012-06-12间隔天数:10

源码下载

参考推荐:

Java 之 Date 和 Calendar

java 已知一个Date(),获取前一天和后一天

from: http://blog.csdn.net/ithomer/article/details/7328109

Java Date 和 Calendar 实例相关推荐

  1. java date 实例_Java Date 和 Calendar 实例

    Java 之 Date 和 Calendar 实例 package com.homer.learn; import java.text.DateFormat; import java.text.Par ...

  2. Java Date 和 Calendar

    Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分.日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算 ...

  3. java Date 和 Calendar类 万字详解(通俗易懂)

    Date类介绍 Date类构造器 Date类使用 关于SimpleDateFormat类 Date类对象的格式化 构造Date对象的补充 Date类对象成员方法 Calendar类介绍及使用 字段演示 ...

  4. java calendar与date_Java中date和calendar的用法

    获取现在系统的时间和日期看起来是一件非常神奇的事情,但是当使用date和calendar之后发现仍然非常神奇. 1.date 使用date日期之前需要导入包: import java.text.Sim ...

  5. Java中date和calendar的用法

    获取现在系统的时间和日期看起来是一件非常神奇的事情,但是当使用date和calendar之后发现仍然非常神奇. 1.date 使用date日期之前需要导入包: import java.text.Sim ...

  6. Java中实用类:Date、Calendar、Math、Random、String、StringBuffer的用法

    枚举 枚举类是一种特殊的类,里面的值全部都是静态常量,每一个枚举值都相当于一个本类对象, 只不过,调用对象的toString方法打印的是对象名.如: enum Color{BLUE,RED,YELLO ...

  7. java day of month_Java Calendar实例增加DAY_OF_MONTH作为递减(仅)HOUR或MINUTE的副作用

    我有一个带有TimePicker(@ id / tyme)的主活动的an unfinished Android app,一个DatePicker(@id / date)和一个TextView(@ id ...

  8. JAVA时间类型:Date、Calendar、LocalDate 、LocalTime、LocalDateTime、Instant的使用

    本文介绍JAVA的几种时间类型的使用:Date.Calendar.LocalDate .LocalTime.LocalDateTime.Instant Date #获取当前时间 Date date = ...

  9. java str2date,java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclongge ...

最新文章

  1. 在linux 下配置firewalld
  2. python3 函数 不定长参数 不定参
  3. 如何修改桌面,收藏夹,我的文档等等的存储位置
  4. Java File类应用:递归遍历文件夹和递归删除文件
  5. 低水平博士是提升科研生涯的毒药
  6. GDCM:gdcm::GroupDict的测试程序
  7. 系统启动数据库服务器,linux系统如何启动数据库服务器
  8. HDU 3342 Legal or Not(拓扑排序)
  9. 分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~
  10. 订婚和结婚有什么区别
  11. Mongodb 学习
  12. 推荐一款windows下好用的文件夹加密、文件加密软件(含使用说明)
  13. 类似携程,飞猪机票列表滚动的日期带价格
  14. android伪装mac地址,安卓手机如何伪装ip或者mac地址
  15. 名字真好听的五子棋——12周进度
  16. Android4.4 状态栏WiFi图标显示流程
  17. 服务端向客户端主动发送消息
  18. git提示subject >50 characters; use shorter first paragraph
  19. 6.电报机与继电器qk
  20. SQL基础总结(二):SQL基础

热门文章

  1. LESSON 10.410.510.6 贝叶斯优化的基本流程BayesOpt vs HyperOpt vs Optuna batch基于BayesOpt实现高斯过程gp优化
  2. 数学建模学习笔记——灰色关联分析(评价类)
  3. 中关村创业大街上的“野心”青年:在这里不用拼爹
  4. 99%创业会失败 去中心化是良药么?
  5. error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
  6. Spring MVC-04循序渐进之基于注解的控制器
  7. Oracle查询优化-04插入、更新与删除数据
  8. 链表的建立,搜索,插入,反转,销毁以及合并有序链表。
  9. MW150UH驱动程序Linux,水星MW150UH无线网卡驱动
  10. RecyclerView添加头条目显示空白的解决方案