`
maoxy
  • 浏览: 141015 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

时间操作函数总汇(转载)

阅读更多

经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下,方便大家查找 
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(); 


 

分享到:
评论

相关推荐

    SQLSERVER时间函数汇总

    在SQL Server中,有多种时间函数可用于操作这些数据类型: 1. GETDATE():返回当前系统的日期和时间。 2. DATEADD():在日期或时间上添加指定的时间间隔,例如增加或减少天数、小时、分钟等。 3. DATEDIFF():计算...

    mssql对时间操作的函数

    下面将详细介绍SQL Server中关于时间操作的主要函数及其用法,并结合实例进行解释。 ### 1. 获取当前系统时间 - `GETDATE()` `GETDATE()` 函数用于获取当前系统的日期和时间。返回值类型为 `datetime` 或 `...

    pb函数库之文件操作函数

    pb函数库之文件操作函数 pb函数库提供了一系列的文件操作函数,用于实现文件的各种操作,包括文件的打开、关闭、删除、检查存在性、获取文件长度等。下面将对这些函数进行详细的介绍。 FileClose()函数 FileClose...

    linux目录操作函数汇总 遍历,改变路径等

    本文旨在汇总Linux环境下目录操作函数的知识点,为开发者提供便利。 1. chdir函数:用于改变当前工作目录。函数原型为`int chdir(const char *path);`,成功执行时返回0,失败则返回-1,并设置errno以指示错误原因...

    经常使用到的ASP常用函数汇总

    以上介绍了ASP中常用的几个函数及其用法,这些函数在实际开发过程中非常有用,能够帮助开发者更高效地处理数据和日期时间相关的操作。通过合理运用这些函数,可以显著提高程序的执行效率和可读性。

    Matlab中插值函数汇总和使用说明

    Matlab 中插值函数汇总和使用说明 本文将对 Matlab 中的插值函数进行总结和使用说明,包括一维数据插值函数 interp1 和二维数据插值函数 interp2 的使用方法和参数说明。 一、interp1 函数 interp1 函数用于一维...

    《Pascal精要及时间函数大全》Delphi精要及时间函数大全

    这些函数允许程序员获取当前时间、进行时间计算、格式化日期和时间等操作。例如,`Date()`函数返回当前日期,`Time()`函数返回当前时间(以24小时制的小时数表示),而`Now()`则同时返回日期和时间。还有一些函数...

    SAP ABAP 时间函数.docx

    为了方便开发人员操作,SAP提供了一系列的时间函数,其中特别关注的是用于获取查询日期最后一天的四个函数:LAST_DAY_OF_MONTHS、RP_LAST_DAY_OF_MONTHS、BKK_GET_MONTH_LASTDAY以及DATE_GET_MONTH_LASTDAY。...

    pb函数库之字符串操作函数

    pb函数库之字符串操作函数 pb函数库提供了一系列的字符串操作函数,用于对字符串进行各种操作,包括字符串填充、截取、删除空格、计算长度、大小写转换、模式匹配等。下面是pb函数库中的一些常用字符串操作函数: ...

    Python数据库操作函数

    Python数据库操作函数,直接将数据库操作封装为函数,可直接调用。

    Delphi-日期时间函数详解.doc

    在 Delphi 中,日期时间处理是非常常见的任务,它涉及到各种函数和类型,使得开发者能够方便地操作、格式化和转换日期时间数据。以下是对 Delphi 日期时间函数的详细解释: 1. 时间类型转换: - `...

    mcgs定时器操作函数设置方法

    本文将对mcgs定时器操作函数进行详细的介绍,包括定时器号、 TimerClearOutput函数、TimerRun函数、TimerStop函数、TimerSkip函数、TimerReset函数、TimerValue函数、TimerStr函数、TimerState函数、TimerSetLimit...

    PHP常用函数汇总

    文件操作函数如`fopen()`打开文件,`fclose()`关闭文件,`fgets()`读取文件一行,`fwrite()`写入文件,`file_get_contents()`读取整个文件到字符串,`file_put_contents()`将字符串写入文件,`unlink()`删除文件,...

    matlab常用数学函数汇总

    这些函数极大地简化了 MATLAB 用户进行数学计算的过程,无论是简单的算术操作还是复杂的三角和超越函数,都可以通过调用相应的函数轻松完成。通过熟练掌握这些函数,可以更高效地解决各种数学问题和进行数值模拟。在...

    Access函数汇总.pdf

    标题“Access函数汇总.pdf”提示我们,本文档是一份关于Microsoft Access数据库系统中的编程函数的全面概览。Microsoft Access是一种流行的桌面数据库管理系统,它允许用户创建和管理数据库、表、查询和报告。VBA...

    组态王6.55时间函数问题解决方法

    组态王6.55时间函数问题解决方法

    tableau计算函数汇总

    tableau desktop 创建计算字段函数汇总,一个html文件以表格的形式汇总。

    c语言文件操作函数

    C语言文件操作函数是C语言标准库中用于进行文件读写、控制和管理的一组函数,这些函数为程序提供了访问和操作磁盘文件的能力。在进行C语言文件操作时,通常要涉及到几个基本步骤,包括打开文件、读写文件、关闭文件...

    pb函数库之窗口操作函数

    pb 函数库之窗口操作函数 pb 函数库之窗口操作函数是 PowerBuilder 的一个重要组件,提供了一系列的窗口操作函数,包括 Open、Close、CloseWithReturn 和 OpenSheet 等。这些函数旨在帮助开发者更方便地创建和管理...

Global site tag (gtag.js) - Google Analytics