请记得要引入java.util.Date和java.text.SimpleDateFormat两个包

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

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

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

2.Calendar和Date的转化 
(1) Calendar转化为Date 
Calendar cal=Calendar.getInstance(); 
Date date=cal.getTime(); 
(2) Date转化为Calendar 
Date date=new Date(); 
Calendar cal=Calendar.getInstance();

cal.setTime(date);

3.格式化输出日期时间 
Date date=new Date(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

System.out.println(df.format(date));

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

(1)计算某一天是一年中的第几星期 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 9); 
cal.set(Calendar.DAY_OF_MONTH, 3);

int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.WEEK_OF_YEAR, 1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); 
System.out.println(df.format(cal.getTime())); 
输出:

2006-01-02

5.add()和roll()的用法 
(1)add()方法 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 9); 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.add(Calendar.DATE, -4); 
Date date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.add(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
输出: 
2006-08-30 
2006-10-03 
(2)roll方法 
cal.set(Calendar.YEAR, 2006); 
cal.set(Calendar.MONTH, 9); 
cal.set(Calendar.DAY_OF_MONTH, 3); 
cal.roll(Calendar.DATE, -4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
cal.roll(Calendar.DATE, 4); 
date=cal.getTime(); 
System.out.println(df.format(date)); 
输出: 
2006-10-29 
2006-10-03

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

6.计算两个任意时间中间的间隔天数 
(1)传进Calendar对象 
/** *//**计算两个时间之间相隔天数 
* @param startday 开始时间 
* @param endday 结束时间 
* @return 
*/ 
public int getIntervalDays(Calendar startday,Calendar endday)...{ 
//确保startday在endday之前 
if(startday.after(endday))...{ 
Calendar cal=startday; 
startday=endday; 
endday=cal; 

//分别得到两个时间的毫秒数 
long sl=startday.getTimeInMillis(); 
long el=endday.getTimeInMillis();

long ei=el-sl; 
//根据毫秒数计算间隔天数 
return (int)(ei/(1000*60*60*24)); 

(2)传进Date对象 
/** *//**计算两个时间之间相隔天数 
* @param startday 开始时间 
* @param endday 结束时间 
* @return 
*/ 
public int getIntervalDays(Date startday,Date endday)...{ 
//确保startday在endday之前 
if(startday.after(endday))...{ 
Date cal=startday; 
startday=endday; 
endday=cal; 

//分别得到两个时间的毫秒数 
long sl=startday.getTime(); 
long el=endday.getTime();

long ei=el-sl; 
//根据毫秒数计算间隔天数 
return (int)(ei/(1000*60*60*24)); 
}同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等 
注:以上方法是完全按时间计算,有时并不能令人满意,如: 
startday="2006-10-11 20:00:00" 
endday="2006-10-12 8:00:00" 
计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现: 
在传参之前,先设定endday的时间,如: 
endday.set(Calendar.HOUR_OF_DAY, 23); 
endday.set(Calendar.MINUTE, 59); 
endday.set(Calendar.SECOND, 59); 
endday.set(Calendar.MILLISECOND, 59); 
这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方法麻烦,可以参考以下方法: 
(3)改进精确计算相隔天数的方法 
public int getDaysBetween (Calendar d1, Calendar d2) ...{ 
if (d1.after(d2)) ...{ // swap dates so that d1 is start and d2 is end 
java.util.Calendar swap = d1; 
d1 = d2; 
d2 = swap; 

int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR); 
int y2 = d2.get(Calendar.YEAR); 
if (d1.get(Calendar.YEAR) != y2) ...{ 
d1 = (Calendar) d1.clone(); 
do ...{ 
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数 
d1.add(Calendar.YEAR, 1); 
} while (d1.get(Calendar.YEAR) != y2); 

return days; 
}

获取系统当前时间: 
public static String getSystemTime(){ 
Date date=new Date(); 
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
return df.format(date); 
}

//字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);

java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");

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

String mDateTime1=formatter.format(d);

//当前时间

Calendar cal = Calendar.getInstance();

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

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss G E D F w W a E F");

String mDateTime=formatter.format(cal.getTime());

//1年前日期

java.util.Date myDate=new java.util.Date();

long myTime=(myDate.getTime()/1000)-60*60*24*365;

myDate.setTime(myTime*1000);

String mDate=formatter.format(myDate);

//明天日期

myDate=new java.util.Date();

myTime=(myDate.getTime()/1000)+60*60*24;

myDate.setTime(myTime*1000);

mDate=formatter.format(myDate);

//两个时间之间的天数

SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

java.util.Date date= myFormatter.parse("2003-05-1");

java.util.Date mydate= myFormatter.parse("1899-12-30");

long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);

//加半小时

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date date1 = format.parse("2002-02-28 23:16:00");

long Time=(date1.getTime()/1000)+60*30;

date1.setTime(Time*1000);

String mydate1=formatter.format(date1);

//年月周求日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");

java.util.Date date2= formatter2.parse("2003-05 5 星期五");

SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");

String mydate2=formatter3.format(date2);

//求是星期几

mydate= myFormatter.parse("2001-1-1");

SimpleDateFormat formatter4 = new SimpleDateFormat("E");

String mydate3=formatter4.format(mydate);

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

package personal.jessica; 
import java.util.Date; 
import java.util.Calendar; 
import java.sql.Timestamp; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Locale; 
class Datetest{ 
/** 
*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp) 
*@param dateString 需要转换为timestamp的字符串 
*@return dataTime timestamp 
*/ 
public final static java.sql.Timestamp string2Time(String dateString) 
throws java.text.ParseException { 
DateFormat dateFormat; 
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式 
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH); 
dateFormat.setLenient(false); 
java.util.Date timeDate = dateFormat.parse(dateString);//util类型 
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型 
return dateTime; 

/** 
*method 将字符串类型的日期转换为一个Date(java.sql.Date) 
*@param dateString 需要转换为Date的字符串 
*@return dataTime Date 
*/ 
public final static java.sql.Date string2Date(String dateString) 
throws java.lang.Exception { 
DateFormat dateFormat; 
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); 
dateFormat.setLenient(false); 
java.util.Date timeDate = dateFormat.parse(dateString);//util类型 
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型 
return dateTime; 
}

public static void main(String[] args){ 
Date da = new Date(); 
//注意:这个地方da.getTime()得到的是一个long型的值 
System.out.println(da.getTime());

//由日期date转换为timestamp

//第一种方法:使用new Timestamp(long) 
Timestamp t = new Timestamp(new Date().getTime()); 
System.out.println(t);

//第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano) 
Timestamp tt = new Timestamp(Calendar.getInstance().get( 
Calendar.YEAR) - 1900, Calendar.getInstance().get( 
Calendar.MONTH), Calendar.getInstance().get( 
Calendar.DATE), Calendar.getInstance().get( 
Calendar.HOUR), Calendar.getInstance().get( 
Calendar.MINUTE), Calendar.getInstance().get( 
Calendar.SECOND), 0); 
System.out.println(tt);

try { 
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串 
String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串 
Date date1 = string2Date(sToDate); 
Timestamp date2 = string2Time(sToTimestamp); 
System.out.println("Date:"+date1.toString());//结果显示 
System.out.println("Timestamp:"+date2.toString());//结果显示 
}catch(Exception e) { 
e.printStackTrace(); 


}

下面是例子:

    1. package test;
    2. import java.text.DateFormat;
    3. import java.text.ParseException;
    4. import java.text.SimpleDateFormat;
    5. import java.util.Calendar;
    6. import java.util.Date;
    7. import java.util.Hashtable;
    8. import javax.swing.JOptionPane;
    9. public class Test2{
    10. public static boolean isdate(String s){
    11. String a[]=s.split("-");
    12. boolean flg=true;
    13. if(!(Integer.parseInt(a[0])>=1950 && Integer.parseInt(a[0])<=2050)){
    14. flg=false;
    15. }
    16. return flg;
    17. }
    18. public static boolean checkDate(String s){
    19. boolean ret = true;
    20. try{
    21. DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    22. ret = df.format(df.parse(s)).equals(s);
    23. }
    24. catch(ParseException e){
    25. ret = false;
    26. }
    27. return ret;
    28. }
    29. public Object dateinfo(String s){
    30. String a[]=s.split("-",2);
    31. Hashtable fest =new Hashtable();
    32. fest.put("01-01","元旦节");
    33. fest.put("02-14","情人节");
    34. fest.put("03-12","植树节");
    35. fest.put("03-15","消费者节");
    36. fest.put("04-01","愚人节");
    37. fest.put("04-05","清明节");
    38. fest.put("05-01","劳动节");
    39. fest.put("06-01","儿童节");
    40. fest.put("07-01","建党节");
    41. fest.put("08-01","建军节");
    42. fest.put("09-10","教师节");
    43. fest.put("10-01","国庆节");
    44. fest.put("12-25","圣诞节");
    45. if(fest.containsKey(a[1])){
    46. return fest.get(a[1]);
    47. }
    48. else{
    49. return "无节日";
    50. }
    51. }
    52. public String xingzuo(Date s){
    53. Calendar cal = Calendar.getInstance();
    54. cal.setTime(s);
    55. String xingzuo="无";
    56. int day=cal.get(Calendar.DAY_OF_YEAR);
    57. if((cal.get(Calendar.YEAR)%4==0)&&(cal.get(Calendar.YEAR)%100!=0)||(cal.get(Calendar.YEAR)%400==0)){
    58. if((day>=1 &&day<=19)||(day>=357&&day<=366)){
    59. xingzuo= "魔蝎座";
    60. }
    61. else if(day>=20 &&day<=49){
    62. xingzuo= "水瓶座";
    63. }
    64. else if(day>=50 &&day<=80){
    65. xingzuo= "双鱼座";
    66. }
    67. else if(day>=81 &&day<=110){
    68. xingzuo= "白羊座";
    69. }
    70. else if(day>=111 &&day<=141){
    71. xingzuo= "金牛座";
    72. }
    73. else if(day>=142 &&day<=173){
    74. xingzuo= "双子座";
    75. }
    76. else if(day>=174 &&day<=203){
    77. xingzuo= "巨蟹座";
    78. }
    79. else if(day>=204 &&day<=235){
    80. xingzuo= "狮子座";
    81. }
    82. else if(day>=236 &&day<=266){
    83. xingzuo= "处女座";
    84. }
    85. else if(day>=267 &&day<=296){
    86. xingzuo= "天秤座";
    87. }
    88. else if(day>=297 &&day<=326){
    89. xingzuo= "天蝎座";
    90. }
    91. else if(day>=327 &&day<=356){
    92. xingzuo= "射手座";
    93. }
    94. }
    95. else{
    96. if((day>=1 &&day<=19)||(day>=357&&day<=366)){
    97. xingzuo= "魔蝎座";
    98. }
    99. else if(day>=20 &&day<=48){
    100. xingzuo= "水瓶座";
    101. }
    102. else if(day>=49 &&day<=79){
    103. xingzuo= "双鱼座";
    104. }
    105. else if(day>=80 &&day<=109){
    106. xingzuo= "白羊座";
    107. }
    108. else if(day>=110 &&day<=140){
    109. xingzuo= "金牛座";
    110. }
    111. else if(day>=141 &&day<=172){
    112. xingzuo= "双子座";
    113. }
    114. else if(day>=173 &&day<=202){
    115. xingzuo= "巨蟹座";
    116. }
    117. else if(day>=203 &&day<=234){
    118. xingzuo= "狮子座";
    119. }
    120. else if(day>=235 &&day<=265){
    121. xingzuo= "处女座";
    122. }
    123. else if(day>=266 &&day<=295){
    124. xingzuo= "天秤座";
    125. }
    126. else if(day>=296 &&day<=325){
    127. xingzuo= "天蝎座";
    128. }
    129. else if(day>=326 &&day<=355){
    130. xingzuo= "射手座";
    131. }
    132. }
    133. return xingzuo;
    134. }
    135. public Date parseDate(String s){
    136. SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    137. try {
    138. Date date3 = bartDateFormat.parse(s);
    139. date3=bartDateFormat.parse(s);
    140. return date3;
    141. }
    142. catch (Exception ex) {
    143. return null;
    144. }
    145. }
    146. public static void main(String[] args) {
    147. Calendar cal = Calendar.getInstance();
    148. Test2 test2=new Test2();
    149. String date1=JOptionPane.showInputDialog("请你输入日期,格式如2000-10-15");
    150. while(!(Test2.checkDate(date1)&&Test2.isdate(date1))){
    151. date1=JOptionPane.showInputDialog("请你输入日期,格式如2000-10-15");
    152. }
    153. SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("yyyy,MM,dd,EEEE");
    154. SimpleDateFormat bartDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
    155. Date date2=test2.parseDate(date1);
    156. String festinfo=(String)test2.dateinfo(date1);
    157. System.out.println(bartDateFormat1.format(date2) +","+ festinfo+","+ test2.xingzuo(date2));
    158. String day=JOptionPane.showInputDialog("请你输入要查询N天后的日期信息");
    159. cal.setTime(date2);
    160. cal.add(Calendar.DATE, Integer.parseInt(day));
    161. String date5=bartDateFormat2.format(cal.getTime());
    162. festinfo=(String)test2.dateinfo(date5);
    163. System.out.println(bartDateFormat1.format(cal.getTime())+","+ festinfo+","+ test2.xingzuo(cal.getTime()));
    164. }
    165. }

java常用日期函数总结的更多相关文章

  1. SQL常用日期函数

    原文:http://www.cnblogs.com/coconut_zhang/archive/2009/02/02/1382598.html 1. 当前系统日期.时间 select getdate( ...

  2. java常用日期类总结

    java 常用的日期类有三个Date.SimpleDateFormat.Calendar

  3. 【hive 日期函数】Hive常用日期函数整理

    1.to_date:日期时间转日期函数 select to_date('2015-04-02 13:34:12');输出:2015-04-02122.from_unixtime:转化unix时间戳到当 ...

  4. MySql常用日期函数(转载)

    /*date_add(date,interval expr type)和date_sub(date,interval expr type)执行日期运算. date 是一个 datetime 或date ...

  5. Oracle常用日期函数

    常用的时间格式掩码如下:掩码元素       含义YYYY           四位数年份 (如:2005)     yearYY             二位数年份(如  05) Q         ...

  6. Java常用日期操作

    对java中常用的日期操作进行整理. 1.日期格式化 /* * 日期格式化类(必须掌握) * API: * G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Mo ...

  7. ORACLE 常用日期函数

    1 . add_months(arg1,num) 返回日期arg1加num个月的新日期. select add_months(date'2011-1-1',1) from dual; result:  ...

  8. java常用日期操作方法

    package com.wujiangpo.test.util; import java.text.ParseException; import java.text.SimpleDateFormat; ...

  9. java常用日期类型转换

    import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import j ...

随机推荐

  1. javaTemplates-学习笔记四

    应用的调用顺序理解 这个地方很薄弱,浏览器 http://localhost:9000/index.html  ->  conf/routes  ->  app/controllers/A ...

  2. python 文本编辑基础记录

    不熟悉编码方式,同时python的编码方式折磨我了很长时间,记录下,以免忘记,本文内容存在错误,是自己理解,看到仅当参考 Unicode 是字符集,有点像一本字典,utf-8是在unicode这本字典 ...

  3. 一次性关闭所有的Activity

    原文:一次性关闭所有的Activity 一次性关闭所有的Activity ActivityManager am = (ActivityManager)getSystemService (Context ...

  4. rsyslog 配置详解

    格式:: 日志设备(类型).(连接符号)日志级别 日志处理方式(action) 日志设备(可以理解为日志类型): ------------------------ auth –pam产生的日志 aut ...

  5. powerpc e500系列,linux初始化的tlb汇编,添加人肉代码注释

    powerpc e500的内核启动,关于tlb的初始化可以说是重头戏.看懂这段代码后,powerpc的虚实映射基本不在话下. 这段初始化tlb要考虑的,主要是将boot可能初始化过的tlb全清零,然后 ...

  6. iOS实现文件上传功能模块

    iOS实现文件上传功能,首先要知道的是,上传到服务器的数据格式,一般采用HTTP文件上传协议.如下图 如图所示,只要设置好了HTTP的协议格式,就可以实现文件上传功能. 代码如下: //图片上传模块 ...

  7. Android @+id与@id的区别

      Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值.id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@ ...

  8. Linux 内核优化

    声明:本文档来自互联网整理部份加自已实验部份所得: TCP 相关部份   经常使用名词说明: retries(再试).   TCP server <---> client通信状态      ...

  9. <转>LINQ To SQL 语法及实例大全

    一篇很全很强大的linq to sql 总结 来源:http://blog.csdn.net/pan_junbiao/article/details/7015633 目录(?)[-] LINQ to ...

  10. java中两个对象间的属性值复制,比较,转为map方法实现

    package com.franson.study.util; import java.lang.reflect.InvocationTargetException; import java.lang ...