`
maoxy
  • 浏览: 141319 次
  • 性别: 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(); 


 

分享到:
评论

相关推荐

    DB2各类函数总汇

    日期时间函数是指对日期和时间进行操作的函数,常用的日期时间函数包括 CURRENT DATE、CURRENT TIMESTAMP、DATE、TIME 等。 六、XML 函数 XML 函数是指对 XML 数据进行操作的函数,常用的 XML 函数包括 XMLPARSE、...

    mssql对时间操作的函数

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

    简单的oracle 时间比较函数

    简单的oracle 时间比较函数,自己在网上找到并加以整理出来。

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

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

    AT9260 gpio 操作函数

    AT9260 GPIO 操作函数 AT9260 系列芯片的 GPIO 操作手册涵盖了 GPIO 操作函数的详细信息,本文档将对标题、描述、标签和部分内容进行详细解释,并生成相关的知识点。 标题:AT9260 gpio 操作函数 标题明确地表明...

    SQL常用函数汇总(比较详细)

    SQL 语言中有多种类型的函数,可以按照不同的分类方式来分类,下面将从函数类别、聚合函数、转换函数、加密函数、游标函数、日期和时间函数、数学函数、元数据函数、排名函数、行集函数、安全函数、字符串函数、系统...

    Linux下精确到微秒级的时间操作函数

    Linux下对时间进行运算,如果是到秒级的,一般是用time之类的函数实现。文中介绍了Linux下精确到微秒级的时间操作函数。主要是用到了gettimeofday函数,并且介绍了这个函数的结构。

    字符串操作函数大全(String)

    字符串操作函数大全(String) 在 C 语言中,字符串操作函数是非常重要的一部分,它们被广泛应用于各种编程领域。今天,我们将对字符串操作函数大全进行讲解,包括字符串拷贝、字符串连接、字符串比较等多种操作。 ...

    常用Execl函数汇总大全

    下面将对常用的 Excel 函数进行汇总和解释。 1.AVEDEV 函数 AVEDEV 函数用途:返回一组数据与其平均值的绝对偏差的平均值,该函数可以评测数据(例如学生的某科考试成绩)的离散度。 语法:AVEDEV(number1,...

    c语言文件操作函数

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

    pb函数库之窗口操作函数

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

    MATLAB图像处理函数汇总

    MATLAB 图像处理函数汇总 MATLAB 图像处理函数是 MATLAB 中的一组强大工具,用于图像处理和分析。本文将对 MATLAB 图像处理函数进行总结,涵盖了各种函数的使用和应用。 1. applylut 函数 applylut 函数用于在二...

    MATLAB常用函数参考 MATLAB函数汇总 精通MATLAB.rar_MATLAB 函数库_Matlab常用函数 _matl

    本资料"MATLAB常用函数参考 MATLAB函数汇总 精通MATLAB.rar"是一个全面收集了MATLAB常用函数的参考资料,旨在帮助用户快速查询和掌握各种函数的用法。 MATLAB的函数库包含了各种数学运算、矩阵操作、数据处理、图像...

    mssql数据库函数汇总

    MSSQL数据库函数汇总 MSSQL数据库提供了多种函数来进行数据处理和分析,本文将对这些函数进行归纳和总结。 聚合函数 聚合函数用于对表达式中的所有值进行计算,常用的聚合函数包括: * SUM:返回表达式中所有值...

    C++ String 类常用成员函数汇总

    C++ String 类常用成员函数汇总 C++ 的 String 类提供了多种成员函数来操作字符串,这些成员函数可以分为构造函数、字符操作、特性描述、输入输出操作和赋值五大类。 首先,String 类的构造函数有多种重载版本,...

    SQL 常用函数- 时间函数

    在SQL Server中,时间函数是数据库管理中不可或缺的一部分,它们用于处理和操作日期和时间数据。日期和时间处理在各种业务场景中极为重要,比如数据分析、报表生成、日志记录等。下面我们将深入探讨SQL Server中的...

    delphi、 sql 日期时间函数

    本篇文章将深入探讨Delphi中的日期函数以及SQL(特别是MSSQL)中的日期时间函数,帮助开发者更好地理解和使用这些功能。 首先,让我们关注Delphi的日期函数。Delphi是一个强大的Object Pascal开发环境,它提供了一...

    mysql 时间函数

    mysql 时间函数 mysql 时间函数是 mysql 中用于处理日期和时间的...mysql 时间函数是 mysql 中非常重要的一部分,它们可以帮助我们处理日期和时间相关的操作。但是,使用这些函数时需要注意它们的区别,以免出现错误。

    js日期时间操作函数.pdf

    JavaScript中日期时间操作是前端开发中常见需求,涉及对日期的创建、格式化、比较等操作。文档提供了多个JavaScript日期对象的扩展函数,用于处理与日期相关的问题。 1. 判断闰年:Date.prototype.isLeapYear 该...

    有关pgsql高级函数汇总

    高级函数汇总

Global site tag (gtag.js) - Google Analytics