Java中Date各种相关用法

本文主要介绍Java中Date各种相关用法。

AD:


 

Java中Date各种相关用法(一)

1.计算某一月份的最大天数

Java代码

  1. Calendar time=Calendar.getInstance();
  2. time.clear();
  3. time.set(Calendar.YEAR,year);
  4. time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
  5. int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date

Java代码

  1. Calendar cal=Calendar.getInstance();
  2. Date date=cal.getTime();

(2) Date转化为Calendar

Java代码

  1. Date date=new Date();
  2. Calendar cal=Calendar.getInstance();
  3. cal.setTime(date);

3.格式化输出日期时间

Java代码

  1. Date date=new Date();
  2. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  3. System.out.println(df.format(date));

4.计算一年中的第几星期

(1)计算某一天是一年中的第几星期

Java代码

  1. Calendar cal=Calendar.getInstance();
  2. cal.set(Calendar.YEAR, 2006);
  3. cal.set(Calendar.MONTH, 8);
  4. cal.set(Calendar.DAY_OF_MONTH, 3);
  5. int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号

Java代码

  1. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
  2. Calendar cal=Calendar.getInstance();
  3. cal.set(Calendar.YEAR, 2006);
  4. cal.set(Calendar.WEEK_OF_YEAR, 1);
  5. cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
  6. System.out.println(df.format(cal.getTime()));

输出:

2006-01-02

5.add()和roll()的用法

(1)add()方法

Java代码

  1. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
  2. Calendar cal=Calendar.getInstance();
  3. cal.set(Calendar.YEAR, 2006);
  4. cal.set(Calendar.MONTH, 8);
  5. cal.set(Calendar.DAY_OF_MONTH, 3);
  6. cal.add(Calendar.DATE, -4);
  7. Date date=cal.getTime();
  8. System.out.println(df.format(date));
  9. cal.add(Calendar.DATE, 4);
  10. date=cal.getTime();
  11. System.out.println(df.format(date));

输出:

2006-08-30
2006-09-03

(2)roll方法

Java代码

  1. cal.set(Calendar.YEAR, 2006);
  2. cal.set(Calendar.MONTH, 8);
  3. cal.set(Calendar.DAY_OF_MONTH, 3);
  4. cal.roll(Calendar.DATE, -4);
  5. date=cal.getTime();
  6. System.out.println(df.format(date));
  7. cal.roll(Calendar.DATE, 4);
  8. date=cal.getTime();
  9. System.out.println(df.format(date));

输出:

2006-09-29
2006-09-03

可见,roll()方法在本月内循环,一般使用add()方法;

Java中Date各种相关用法(二)

6.计算两个任意时间中间的间隔天数

(1)传进Calendar对象

Java代码

  1. /** *//**计算两个时间之间相隔天数
  2. * @param startday 开始时间
  3. * @param endday 结束时间
  4. * @return
  5. */
  6. public int getIntervalDays(Calendar startday,Calendar endday)...{
  7. //确保startday在endday之前
  8. if(startday.after(endday))...{
  9. Calendar cal=startday;
  10. startday=endday;
  11. endday=cal;
  12. }
  13. //分别得到两个时间的毫秒数
  14. long sl=startday.getTimeInMillis();
  15. long el=endday.getTimeInMillis();
  16. long ei=el-sl;
  17. //根据毫秒数计算间隔天数
  18. return (int)(ei/(1000*60*60*24));
  19. }

(2)传进Date对象

Java代码

  1. /** *//**计算两个时间之间相隔天数
  2. * @param startday 开始时间
  3. * @param endday 结束时间
  4. * @return
  5. */
  6. public int getIntervalDays(Date startday,Date endday)...{
  7. //确保startday在endday之前
  8. if(startday.after(endday))...{
  9. Date cal=startday;
  10. startday=endday;
  11. endday=cal;
  12. }
  13. //分别得到两个时间的毫秒数
  14. long sl=startday.getTime();
  15. long el=endday.getTime();
  16. long ei=el-sl;
  17. //根据毫秒数计算间隔天数
  18. return (int)(ei/(1000*60*60*24));
  19. }

同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等

注:以上方法是完全按时间计算,有时并不能令人满意,如:

startday="2006-10-11 20:00:00"
endday="2006-10-12 8:00:00"

计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:

在传参之前,先设定endday的时间,如:

Java代码

  1. endday.set(Calendar.HOUR_OF_DAY, 23);
  2. endday.set(Calendar.MINUTE, 59);
  3. endday.set(Calendar.SECOND, 59);
  4. endday.set(Calendar.MILLISECOND, 59);

这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法:

(3)改进精确计算相隔天数的方法

Java代码

  1. public int getDaysBetween (Calendar d1, Calendar d2) ...{
  2. if (d1.after(d2)) ...{ // swap dates so that d1 is start and d2 is end
  3. java.util.Calendar swap = d1;
  4. d1 = d2;
  5. d2 = swap;
  6. }
  7. int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
  8. int y2 = d2.get(Calendar.YEAR);
  9. if (d1.get(Calendar.YEAR) != y2) ...{
  10. d1 = (Calendar) d1.clone();
  11. do ...{
  12. days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
  13. d1.add(Calendar.YEAR, 1);
  14. } while (d1.get(Calendar.YEAR) != y2);
  15. }
  16. return days;
  17. }

Java中Date各种相关用法(三)

获取系统当前时间:

Java代码

  1. public static String getSystemTime(){
  2. Date date=new Date();
  3. SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  4. return df.format(date);
  5. }
  6. //字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
  7. java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
  8. java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
  9. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  10. String mDateTime1=formatter.format(d);
  11. //当前时间
  12. Calendar cal = Calendar.getInstance();
  13. // SimpleDteFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  14. SimpleDateFormat formatter =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss G E D F w W a E F");
  15. String mDateTime=formatter.format(cal.getTime());
  16. //1年前日期
  17. java.util.Date myDate=new java.util.Date();
  18. long myTime=(myDate.getTime()/1000)-60*60*24*365;
  19. myDate.setTime(myTime*1000);
  20. String mDate=formatter.format(myDate);
  21. //明天日期
  22. myDate=new java.util.Date();
  23. myTime=(myDate.getTime()/1000)+60*60*24;
  24. myDate.setTime(myTime*1000);
  25. mDate=formatter.format(myDate);
  26. //两个时间之间的天数
  27. SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
  28. java.util.Date date= myFormatter.parse("2003-05-1");
  29. java.util.Date mydate= myFormatter.parse("1899-12-30");
  30. long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);
  31. //加半小时
  32. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  33. java.util.Date date1 = format.parse("2002-02-28 23:16:00");
  34. long Time=(date1.getTime()/1000)+60*30;
  35. date1.setTime(Time*1000);
  36. String mydate1=formatter.format(date1);
  37. //年月周求日期
  38. SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
  39. java.util.Date date2= formatter2.parse("2003-05 5 星期五");
  40. SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
  41. String mydate2=formatter3.format(date2);
  42. //求是星期几
  43. mydate= myFormatter.parse("2001-1-1");
  44. SimpleDateFormat formatter4 = new SimpleDateFormat("E");
  45. String mydate3=formatter4.format(mydate);
  46. }

在 开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只 需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver数据库的DateTime类型,即需要年月日时分秒的,选 择java.sql.Timestamp类型

你可以使用dateFormat定义时间日期的格式,转一个字符串即可

Java代码

  1. package personal.jessica;
  2. import java.util.Date;
  3. import java.util.Calendar;
  4. import java.sql.Timestamp;
  5. import java.text.DateFormat;
  6. import java.text.SimpleDateFormat;
  7. import java.util.Locale;
  8. class Datetest{
  9. /**
  10. *method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
  11. *@param dateString 需要转换为timestamp的字符串
  12. *@return dataTime timestamp
  13. */
  14. public final static java.sql.Timestamp string2Time(String dateString)
  15. throws java.text.ParseException {
  16. DateFormat dateFormat;
  17. dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式
  18. //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
  19. dateFormat.setLenient(false);
  20. java.util.Date timeDate = dateFormat.parse(dateString);//util类型
  21. java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
  22. return dateTime;
  23. }

Java中Date各种相关用法(四)

  1. /**
  2. *method 将字符串类型的日期转换为一个Date(java.sql.Date)
  3. *@param dateString 需要转换为Date的字符串
  4. *@return dataTime Date
  5. */
  6. public final static java.sql.Date string2Date(String dateString)
  7. throws java.lang.Exception {
  8. DateFormat dateFormat;
  9. dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
  10. dateFormat.setLenient(false);
  11. java.util.Date timeDate = dateFormat.parse(dateString);//util类型
  12. java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
  13. return dateTime;
  14. }
  15. public static void main(String[] args){
  16. Date da = new Date();
  17. //注意:这个地方da.getTime()得到的是一个long型的值
  18. System.out.println(da.getTime());
  19. //由日期date转换为timestamp
  20. //第一种方法:使用new Timestamp(long)
  21. Timestamp t = new Timestamp(new Date().getTime());
  22. System.out.println(t);
  23. //第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
  24. Timestamp tt = new Timestamp(Calendar.getInstance().get(
  25. Calendar.YEAR) - 1900, Calendar.getInstance().get(
  26. Calendar.MONTH), Calendar.getInstance().get(
  27. Calendar.DATE), Calendar.getInstance().get(
  28. Calendar.HOUR), Calendar.getInstance().get(
  29. Calendar.MINUTE), Calendar.getInstance().get(
  30. Calendar.SECOND), 0);
  31. System.out.println(tt);
  32. try {
  33. String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串
  34. String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串
  35. Date date1 = string2Date(sToDate);
  36. Timestamp date2 = string2Time(sToTimestamp);
  37. System.out.println("Date:"+date1.toString());//结果显示
  38. System.out.println("Timestamp:"+date2.toString());//结果显示
  39. }catch(Exception e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. }

Java获取系统时间的年份

Java代码

  1. public static String getYear(){
  2. Calendar ca = Calendar.getInstance();
  3. ca.setTime(new java.util.Date());
  4. String year = ""+ca.get(Calendar.YEAR);
  5. return year;
  6. }
  7. public void getYear(){
  8. Calendar ca = Calendar.getInstance();
  9. ca.setTime(new java.util.Date());
  10. SimpleDateFormat simpledate = new SimpleDateFormat("yyyyMMdd");
  11. String date = simpledate.format(ca.getTime());
  12. int year = ca.get(Calendar.YEAR);
  13. int month = ca.get(Calendar.MONTH);
  14. int day = ca.get(Calendar.DAY_OF_MONTH);
  15. System.out.println(date+"||"+year+"||"+month+"||"+day);
  16. }

原文链接:http://lgz.iteye.com/blog/1286882

转载于:https://blog.51cto.com/ctogaojie/744012

Java中Date各种相关用法相关推荐

  1. 最新Java中Date类型详解

    一.Date类型的初始化 1. Date(int year, int month, int date); 直接写入年份是得不到正确的结果的. 因为java中Date是从1900年开始算的,所以前面的第 ...

  2. Java中Date和Calender类的使用方法

    查看文章     Java中Date和Calender类的使用方法 2009-10-04 20:49 Date和Calendar是Java类库里提供对时间进行处理的类,由于日期在商业逻辑的应用中占据着 ...

  3. java中compare语句的用法,compare的用法_java中 compareTo()的程序代码及用法

    compare的用法与区别? 一.用法 v. (动词) 1.compare的基本意思是"比较,对照",主要用于比较事物的典型特征及其价值,而不在于比较相同与不同. 2.compar ...

  4. Java中邮箱的相关使用

    Java中邮箱的相关使用 1 Java中邮箱的简介 2 邮箱的使用 1 Java原生操作邮箱 1 导入maven坐标 2 添加邮件工具类 2 SpringBoot中操作邮箱 0 准备一个好的Sprin ...

  5. java中iterator用法_java_详解Java中Iterator迭代器的用法,迭代器(Iterator)迭代 - phpStudy...

    详解Java中Iterator迭代器的用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为&quo ...

  6. java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法

    本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园  https://www.cnblogs.com/benjieqiang/p/114288 ...

  7. java中Date日期类型的大小比较

    java中Date日期类型的大小比较 方法一: java.util.Date类实现了Comparable接口,可以直接调用Date的compareTo()方法来比较大小 String beginTim ...

  8. Java中split函数的用法及使用示例

    Java中split函数的用法及使用示例 2010-05-04 10:21 日志原文:http://lhgc.blog.sohu.com/80444801.html java.lang.string. ...

  9. JAVA中 BufferedImage、ImageIO用法

    转载:JAVA中BufferedImage.ImageIO用法 - 邓维-java - 博客园 (cnblogs.com) BufferedImage          BufferedImage是其 ...

最新文章

  1. optee中spinlock的实现原理详解
  2. 模拟计算机病毒效果 js,用户登录模拟效果(原生js实现)
  3. dataframe 众数的方法_学习数据分析数据方法论 [描述性统计分析]
  4. Firefox无法启动,提示Profile is yet in use by another Firefox
  5. Java NIO学习篇之NIO的基本认识
  6. java继承矩形例子代码_Java代码实现矩形覆盖实例
  7. python简单代码-手把手教你用Python创建简单的神经网络(附代码)
  8. Linux安装和卸载MySQL数据库
  9. 优化 RTD 温度传感系统:挑战
  10. 逆向工具IDA下载网址
  11. WebService原理
  12. CSS属性—居中对齐篇
  13. 面试题——————JAVA完成人民币大写转化
  14. Learn Git Branching 学习笔记(关于origin和它的周边——Git远程仓库高级操作篇)
  15. CSV格式文件向安卓小米手机中导入通讯录
  16. HTML将某几个文字添加下划线 并标红
  17. 使用阿里云镜像加速器
  18. localize by triangle note
  19. 利用NURBS曲线进行点云曲面拟合算法
  20. WaveDrom的使用

热门文章

  1. es中GatewayMetaState
  2. lightningJS之动画
  3. sigsuspend的使用
  4. UVa11770 - Lighting Away(排序+DFS)
  5. 深入浅出计算机组成原理学习笔记:高速缓存(下)-你确定你的数据更新了么?(第38讲)...
  6. Tree命令安装和使用
  7. shopping car 2.0
  8. 【机器学习】周志华 读书笔记 第一章 绪论
  9. 使用 Composer 安装 Laravel 框架
  10. Creating an Extender Control to Associate a Client Behavior with a Web Server Control