这两周时间的Java开发让我感觉到JAVA语言确实把一些简单的事情搞得很复杂,比如日期时间处理,或许是考虑不同时区国际化跨平台之类的因素,但JAVA语言处理确实让我很困惑,相信身边好多开发的同事也如此,只是简单知道有这些概念,遇到具体问题还需要上网查找,刚没事上网搜索了Java时间处理、api相关主题,基本没有多少满意结果,就暂时将觉得好的、让我有些收获的记录下来,以后遇到具体问题时再借助网络资源解决。
Calendar是一个抽象类----专门获取一个时间点的DAY,MONTH,YEAR,一年中的第几天,星期几,一个月中的第几天等等
Calendar rightNow = Calendar.getInstance()可获得一个Calendar (将当前时间点封装成一个Calendar对象)
 
java.util.Date类   子类Calendar是一个抽象类----专门获取一个时间点的DAY,MONTH,YEAR,一年中的第几天,星期几,一个月中的第几天等等
 
Calendar rightNow = Calendar.getInstance()可获得一个Calendar (将当前时间点封装成一个Calendar对象)
用java.util.Date的三个子类java.sql.Date/java.sql.Time/java.sql.Timestamp处理
       ------------java.sql.Date   只存日期(年月日)
       ------------java.sql.Time   只存时间(时分秒  毫秒???)
       ------------java.sql.Timestamp(时间点):包括日期和时间两部分(年月日时分秒.纳秒)
——————————————————————————————————————————————————————
1.UTC/UT
  世界标准时间
2.GMT
  格林威治时间---1970 年 1 月 1 日 00:00:00(貌似和世界标准时间是一回事)
3.how to get the current time
  1)System.currentTimeMillis-----返回当前时间点的毫秒表示,一般用于记录程序的运行时间
  2)Date date = new Date();
  3)Calendar calendar = Calendar.getInstance();
4.how to format it
  日期的格式化(比如年月日的格式---年/月/日或年-月-日)要使用(java.text包中)抽象类DateFormat的子类
  SimpleDateFormat
  new SimpleDateFormat("日期格式")---->MM是月份,mm是分;HH是24小时制,而hh是12小时制
5.how to convert a string to a date/time
  方法一:
  1)已知str="2012,12,21",new SimpleDateFormat("yyyy,MM,dd")----->创建要解析字符串为日期的格式
  2)sdf.parse(str)--->返回字符串对应的Date------->SimpleDateFormat除了格式化Date为字符串外,还能把字符串
                                                                            按格式解析为Date
  方法二:
  1)先将字符串转为"yyyy-mm-dd hh:mm:ss.0(纳秒)"的格式
  2)调用Timestamp t = new Timestamp().valueOf(str);(Timestamp的静态方法,util.Date.parse方法已过时..)
 
6.how to process the date/time with database
用java.util.Date的三个子类java.sql.Date/java.sql.Time/java.sql.Timestamp处理

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));    //获取东八区时间

int year = c.get(Calendar.YEAR);    //获取年
  int month = c.get(Calendar.MONTH) + 1;   //获取月份,0表示1月份
  int day = c.get(Calendar.DAY_OF_MONTH);    //获取当前天数
  int first = c.getActualMinimum(c.DAY_OF_MONTH);    //获取本月最小天数
  int last = c.getActualMaximum(c.DAY_OF_MONTH);    //获取本月最大天数
  int time = c.get(Calendar.HOUR_OF_DAY);       //获取当前小时
  int min = c.get(Calendar.MINUTE);          //获取当前分钟
  int xx = c.get(Calendar.SECOND);          //获取当前秒

SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String curDate = s.format(c.getTime());  //当前日期

  Date d2 = new Date();
                   //年份
                   int year = d2.getYear() + 1900;
                   //月份
                   int month = d2.getMonth() + 1;
                   //日期
                   int date = d2.getDate();
                   //小时
                   int hour = d2.getHours();
                   //分钟
                   int minute = d2.getMinutes();
                   //秒
                   int second = d2.getSeconds();
                   //星期几
                   int day = d2.getDay();
使用Date类中对应的get方法,可以获得Date类对象中相关的信息,需要注意的是使用getYear获得是Date对象中年份减去1900以后的值,所以需要显示对应的年份则需要在返回值的基础上加上1900,月份类似。在Date类中还提供了getDay方法,用于获得Date对象代表的时间是星期几,Date类规定周日是0,周一是1,周二是2,后续的依次类推。
   //将Date类的对象转换为相对时间
                   long t = d3.getTime();
                   System.out.println(t);
                   //将相对时间转换为Date类的对象
                   Date d4 = new Date(time);
                   System.out.println(d4);
         使用Date对象中的getTime方法,可以将Date类的对象转换为相对时间,使用Date类的构造方法,可以将相对时间转换为Date类的对象。经过转换以后,既方便了时间的计算,也使时间显示比较直观了。
从JDK1.1版本开始,在处理日期和时间时,系统推荐使用Calendar类进行实现。在设计上,Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些,下面就介绍一下Calendar类的使用。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
public final Date getTime()方法的作用是将Calendar类型的对象转换为对应的Date类对象,两者代表相同的时间点。
类似的方法是setTime,该方法的作用是将Date对象转换为对应的Calendar对象,该方法的声明如下:public final void setTime(Date date)
转换的示例代码如下:
                  Date d = new Date();
                   Calendar c6 = Calendar.getInstance();
                   //Calendar类型的对象转换为Date对象
                   Date d1 = c6.getTime();
                   //Date类型的对象转换为Calendar对象
                   Calendar c7 = Calendar.getInstance();
                   c7.setTime(d);
 //将Calendar对象转换为相对时间
                            long t1 = c8.getTimeInMillis();
                            //将相对时间转换为Calendar对象
                            Calendar c9 = Calendar.getInstance();
                            c9.setTimeInMillis(t1);
/**
 * 计算两个日期之间相差的天数
 */
public class DateExample1 {
         public static void main(String[] args) {
                   //设置两个日期
                   //日期:2009年3月11号
                   Calendar c1 = Calendar.getInstance();
                   c1.set(2009, 3 - 1, 11);
                   //日期:2010年4月1号
                   Calendar c2 = Calendar.getInstance();
                   c2.set(2010, 4 - 1, 1);
                   //转换为相对时间
                   long t1 = c1.getTimeInMillis();
                   long t2 = c2.getTimeInMillis();
                   //计算天数
                   long days = (t2 - t1)/(24 * 60 * 60 * 1000);
                   System.out.println(days);
         }
}
   import java.util.*;
/**
 * 输出当前月的日历
 */
public class DateExample2{
         public static void main(String[] args){
                   //获得当前时间
                   Calendar c = Calendar.getInstance();
                   //设置代表的日期为1号
                   c.set(Calendar.DATE,1);
                   //获得1号是星期几
                   int start = c.get(Calendar.DAY_OF_WEEK);
                   //获得当前月的最大日期数
                   int maxDay = c.getActualMaximum(Calendar.DATE);   
                  
                   //输出标题
                   System.out.println("星期日 星期一 星期二 星期三 星期四 星期五   星期六");
                   //输出开始的空格
                   for(int i = 1;i < start;i++){
                            System.out.print("      "); 
                   }
                   //输出该月中的所有日期
                   for(int i = 1;i <= maxDay;i++){
                            //输出日期数字
                            System.out.print(" " + i);
                            //输出分隔空格
                            System.out.print("     ");
                            if(i < 10){
                                     System.out.print(' ');
                            }
                            //判断是否换行
                            if((start + i - 1) % 7 == 0){
                                     System.out.println();       
                            }
                   }
                   //换行
                   System.out.println();       
         }       
}

java日期时间处理小结的更多相关文章

  1. Java 日期时间

    Java 日期时间 标签 : Java基础 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含 ...

  2. Java日期时间使用(转)

    Java日期时间使用总结 转自:http://lavasoft.blog.51cto.com/62575/52975/   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个 ...

  3. Java日期时间处理

    Java 日期时间处理 一.时间相关类 java.lang.System java.util.Date java.util.Calendar java.util.GregorianCalendar j ...

  4. Java日期时间,以及相互转换

    Java日期时间,以及相互转化 package com.study.string; import java.text.ParseException; import java.text.SimpleDa ...

  5. Java 日期时间 Date类型,long类型,String类型表现形式的转换

    Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型 java.util.Date dt = new Date(); ...

  6. Java日期时间使用总结[转载]

    Java日期时间使用总结   一.Java中的日期概述   日期在Java中是一块非常复杂的内容,对于一个日期在不同的语言国别环境中,日期的国际化,日期和时间之间的转换,日期的加减运算,日期的展示格式 ...

  7. Java-Runoob:Java 日期时间

    ylbtech-Java-Runoob:Java 日期时间 1.返回顶部 1. Java 日期时间 java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实 ...

  8. Java日期时间实用工具类

    Java日期时间实用工具类 1.Date (java.util.Date)    Date();        以当前时间构造一个Date对象    Date(long);        构造函数   ...

  9. Java 日期时间格式化

    在此记录Java日期时间格式化转换符,方便以后有需要时查找. 1.日期格式化 2.时间格式化 3.格式化常见的日期时间组合

随机推荐

  1. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  2. JVM基础和调优(五)

    垃圾回收算法中收集器 接着上面的说,了解了JVM收集垃圾的过程,然后我们看一看收集器. 串行收集器:用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所 ...

  3. Go语言中的管道(Channel)总结

    管道(Channel)是Go语言中比较重要的部分,经常在Go中的并发中使用.今天尝试对Go语言的管道来做以下总结.总结的形式采用问答式的方法,让答案更有目的性. Q1.管道是什么? 管道是Go语言在语 ...

  4. poj1284:欧拉函数+原根

    何为原根?由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a ...

  5. EucOne调试

    ~/.ssh/id_rsa权限问题,造成ssh无法登陆问题解决;

  6. 关于void*函数返回

    一. sample #include<iostream> using namespace std; void* test(void* pass) { return pass; } int ...

  7. 浅谈c语言程序为什么需要内存 栈又是什么?

    .关于内存(程序的执行需要内存的支持) ()内存本身在物理上是硬件器件,由操作系统提供 ()内存的管理最终由操作系统统一管理.为了能过便捷的管理内存(酒店管理房间 是不是分很多不同的类型和待遇呢),同 ...

  8. java DI 框架spring(web)、Guice(web)、Dagger&Dagger2(android)

    java DI 框架spring(web).Guice(web).Dagger&Dagger2(android) (待续...)

  9. (转)iOS7界面设计规范(4) - UI基础 - 布局

    好吧,第四篇的样子,节奏还好:我怎么又是刚吃过小龙虾的状况呢. 今天的话题是布局,篇幅很短:我自己好喜欢这样,在还有些剩余时间和精力的情况下,一个话题一个话题的推进,做做译文,并热切的希望这些内容在自 ...

  10. 讲解版的自动轮播(新手福利)样式和js就不分离了为了看的方便

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...