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

经常用到时间日期类

    博客分类:
  • java
阅读更多

经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下,方便大家查找
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, 8);
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, 8);
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-09-03
(2)roll方法
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
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-09-29
2006-09-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();
}
}
}

分享到:
评论

相关推荐

    日期类 Date 日期的基本运算

    在实践中,我们可能会用到标准库中的`<ctime>`头文件,这个文件提供了时间处理的相关函数,如`mktime()`,它可以将`struct tm`转换为`time_t`,从而获取日期的完整信息。此外,对于时间的计算,可以使用`difftime()`...

    易语言格式化时间和日期

    3. **格式化函数**:在处理时间日期时,我们常常需要将内部的数值转换为人类可读的格式,这就需要用到格式化函数。例如,“格式化日期”和“格式化时间”函数,它们允许开发者指定日期和时间的显示格式,如“年/月/...

    做电商产品报表的时候经常会用到时间日期的推算确定商品的更新时间,教大家怎么样使用YEAR,MONTH,WEEKUNM,DAY

    做电商产品报表的时候经常会用到时间日期的推算确定商品的更新时间,教大家怎么样使用EXCEL表格YEAR,MONTH,WEEKUNM,DAY

    易语言日期时间框源码.zip

    4. **数据存储和读取**:程序可能需要将用户选择的日期时间保存到文件或数据库中,这需要用到如`写文本文件()`和`读文本文件()`等文件操作函数。 5. **错误处理**:在处理日期时间的过程中,可能会遇到无效的日期...

    工作中经常常会用到的java工具类

    2. **TimeUtil.java** 和 **DateUtil.java**:时间日期工具类,提供了处理时间和日期的函数,如获取当前时间、时间格式化、时间比较、日期加减等。在处理日期和时间相关的业务逻辑时,这两个工具类可以极大地提升...

    日期类 将短时间格式时间转换为字符串

    为了显示或打印日期,我们需要将其转换为人类可读的字符串形式,这就需要用到 `SimpleDateFormat` 类。`SimpleDateFormat` 是一个具体的类,实现了 `DateFormat` 接口,可以用来解析、格式化和打印日期/时间。 在...

    工具类项目,开发经常用到的一些工具类

    标题和描述都提到了“开发经常用到的一些工具类”,这意味着这个项目集合了一组广泛应用于各种场景的实用函数。 在Java开发中,工具类可以涵盖许多领域,如字符串处理、日期时间操作、数学计算、集合操作等。例如,...

    时间转化工具类 开发常常用到

    时间转化工具类是开发者为了方便快捷地进行时间转换和格式化而创建的一种实用工具。这类工具通常包含了一系列静态方法,可以直接调用,无需实例化对象,从而简化了代码逻辑,提高了开发效率。在本案例中,我们讨论的...

    Extjs 5 日期时间控件

    在ExtJS 5中,日期时间控件是开发用户界面时经常会用到的组件,它允许用户选择和输入日期及时间值。本篇文章将深入探讨ExtJS 5的日期时间控件及其特点。 首先,ExtJS 5 的日期时间控件(DateTimeField)结合了日期...

    经常用到的javascript日期函数库啊

    为了简化这一过程,许多开发者选择利用自定义的日期函数库或者现有的第三方库来完成复杂的日期时间操作。本文将详细介绍一个实用的JavaScript日期函数库,包括其核心功能及使用方法。 #### 二、核心功能 根据提供...

    java开发用到的日期控件

    本话题主要围绕"java开发用到的日期控件"展开,我们将深入探讨Java中的日期控件及其重要性、常见组件以及如何在实际开发中应用。 首先,Java提供了多种内置的日期处理类,如`java.util.Date`、`java.time.LocalDate...

    时间和日期程序

    这个库提供了处理时间日期的类和函数,如`time_t`类型用于存储时间戳,`ctime()`、`localtime()`和`gmtime()`函数用于将时间戳转换为可读格式,还有`struct tm`结构体用于表示日期和时间。开发者可以通过这些工具...

    时间日期JavaScript 选择时间日期

    JavaScript是Web开发中不可或缺...以上就是JavaScript处理日期和时间的一些核心知识点,这些在日常Web开发中经常被用到,尤其在创建交互式日期选择器时。通过学习和理解这些概念,你可以更好地构建功能丰富的网页应用。

    iOS日期格式化类(刚刚、一分钟前、昨天、周几)

    "iOS日期格式化类(刚刚、一分钟前、昨天、周几)"这个主题聚焦于如何利用Objective-C来处理日期的本地化显示,使得时间表述更加直观易懂。在这个场景下,我们通常会用到`NSDateFormatter`类以及相关的辅助方法来实现...

    易语言长整数与日期时间转换

    尽管它们不是专门用于日期时间转换,但在某些高级操作中可能会用到。例如,当你需要直接操作内存来优化性能,或者处理非标准的数据结构时,这些函数就显得尤为重要。不过,对于初学者来说,这两个函数可能较难理解和...

    VB修改系统日期时间格式

    1. **日期时间格式化**:VB中的`DateTimeFormatInfo`类提供了许多预定义的日期和时间格式,如`ShortDatePattern`、`LongDatePattern`、`ShortTimePattern`和`LongTimePattern`。我们可以通过修改这些属性值来改变...

    java操作时间工具类

    Java操作时间工具类是开发者日常工作中经常会用到的模块,特别是在处理日期和时间相关的业务逻辑时。本工具类主要是为了方便地对日期和时间进行格式化、比较、计算等操作,提高开发效率。下面我们将详细探讨Java中...

    android 开发常用到的工具类集锦

    4. **日期时间工具类**:处理日期和时间在Android开发中非常常见,例如格式化日期、计算时间差等。Android提供了一些基础的日期时间API,但往往不够灵活,所以开发者会自定义或者使用第三方库如ThreeTenABP,提供更...

    PHP常用类,开发中经常用到 你懂的

    - `DateTime`类:处理日期和时间,提供了丰富的功能,如加减时间、比较等。 - `DateInterval`类:表示两个日期间的时间间隔。 - `DateTimeZone`类:处理时区。 5. **文件系统操作**: - `SplFileInfo`类:提供...

    日期筛选工具类

    - **Moment.js/Luxon**:这些库提供了强大的日期和时间处理能力,用于日期格式化、比较和计算。 - **CSS/Bootstrap**:用于美化界面和响应式布局,确保在不同设备上都有良好的显示效果。 - **Java/Spring Boot** ...

Global site tag (gtag.js) - Google Analytics