java日期类型转换总结date timestamp calendar string

用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式。

Timestamp转化为String:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒

Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间

String str = df.format(now);

String转化为Timestamp:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = df.format(new Date());

Timestamp ts =
Timestamp.valueOf(time);

Date、String、Timestamp之间的转换!

Date 和String之间的转换main函数:
public static void main(String[] args) {
   // TODO Auto-generated method
stub
DateFormat format = new
SimpleDateFormat("yyyy-MM-dd");

Date date =
null;   
String str =
null;

//
String转Date

str =
"2009-01-06";

try {   
date = format.parse(str); // Wed sep 26 00:00:00 CST
2007   
} catch (ParseException e)
{   
e.printStackTrace();

}

date = java.sql.Date.valueOf(str); // 只保留日期部分,返回的是java.sql.Date
2007-9-26
System.out.println(date);
//
Date转String

date = new Date();   // Wed sep
26 18 17:14:01 CST
2007

str = format.format(date); //
2007-9-26

System.out.println(str);
format =
DateFormat.getDateInstance(DateFormat.SHORT);

str = format.format(date); // 07-9-26
System.out.println(str);

format =
DateFormat.getDateInstance(DateFormat.MEDIUM);

str = format.format(date); //
2007-9-26  
                
System.out.println(str);
     
format =
DateFormat.getDateInstance(DateFormat.FULL);

str = format.format(date); // 2007年9月26日 星期三
   System.out.println(str);
}

Timestamp和String之间转换的函数:
public static void main(String[] args) {
   // TODO Auto-generated method
stub
   //Timestamp转化为String:
   
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");//定义格式,不显示毫秒
    Timestamp
now = new Timestamp(System.currentTimeMillis());//获取系统当前时间
    String str =
df.format(now);
   
System.out.println(str);
   
        
///String转化为Timestamp:
      
   SimpleDateFormat df1 = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date =
new Date();
    String time
= df1.format(date);
    Timestamp ts
= Timestamp.valueOf(time);
   
System.out.println(ts);

}

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

Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year 为 int
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.把字符串转化为java.util.Date
方法一:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date dt=sdf.parse("2005-2-19");
System.out.print(sdf.format(dt));   
//输出结果是:2005-2-19

方法二:
java.util.Date dt=null;
DateFormat df=DateFormat.getDateInstance();
dt=df.parse("2005-12-19");
System.out.println(dt);             
//输出结果为:Mon Dec 19 00:00:00 CST 2005
System.out.println(df.format(dt)); //输出结果为:2005-2-19

4.把字符串转化为java.sql.Date
字符串必须是"yyyy-mm-dd"格式,否则会抛出IllegalArgumentException异常
java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");
System.out.println(sdt);         
//输出结果为:2005-9-6

5.格式化输出日期时间 (这个用的比较多)

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd
hh:mm:ss");
String time=df.format(date);
System.out.println(time);

需要注意的一点:SimpleDateFormat类格式化一个字符串时,可根据需要调用 format() 或 parse()
函数;只不过format()返回String类型,parse()返回java.util.Date类型

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

(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

7.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()方法;

8.计算两个任意时间中间的间隔天数(这个比较常用)
(1)传进Calendar对象
    public int
getIntervalDays(Calendar startday,Calendar
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对象

public
int getIntervalDays(Date startday,Date
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));
    }
(3)改进精确计算相隔天数的方法
    public int
getDaysBetween (Calendar d1, Calendar d2){
       
if (d1.after(d2)){
           
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_F_YEAR);//得到当年的实际天数
               
d1.add(Calendar.YEAR, 1);
           
} while (d1.get(Calendar.YEAR) != y2);
       
}
       
return days;
    }
注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配最好装化成
long去比较
如: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);
   3周前的日期
   Calendar cal3 =
Calendar.getInstance();
cal3.add(cal3.DATE, -21);//取3周前的日期
String date = formatter.format(cal3.getTime());

9. String 和 Date ,Long 之间相互转换 (最常用)

字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-比较

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");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
String mDateTime1=formatter.format(d);

10. 通过时间求时间

年月周求日期
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);

11. java 和 具体的数据库结合

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

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的构造函数

1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象并对其进行初始化以反映当前时间。

1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。
参数:
date - 相对于GMT 1970年1月1日00:00:00的毫秒数。

1.3从年月日时分秒构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)
这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month,
date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year
+ 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900,
month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs,
min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min,
sec)代替。

时间: 2024-10-12 15:31:34

java日期类型转换总结date timestamp calendar string的相关文章

java 日期操作,Date、Calendar 操作

java开发中避免不了日期相关操作,这里总结了一些常用方法~ 直接上码: package jse; import java.io.UnsupportedEncodingException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /**  * 常用日期操

java日期互转:LocalDateTime、String、TimeStamp、Long、Instant、Date

由于java版本的迭代,一个使用java开发的项目中可能出现多种日期对象,例如LocalDateTime.LocalDate.Date,不像C#只有一个DateTime,因此在各种日期格式或者对象之间的转换显得有点复杂,总是记不住,在需要用到时总是需要依靠搜索引擎,有点浪费时间,所以特意把常用的转换场景总结如下: 1. LocalDateTime转为String.TimeStamp.Long.Instant. Date System.out.println("----------------Lo

Java 日期时间处理

Java 日期时间处理 Date java.util.Date对象表示一个精确到毫秒的瞬间; 但由于Date从JDK1.0起就开始存在了,历史悠久,而且功能强大(既包含日期,也包含时间),所以他的大部分构造器/方法都已Deprecated,因此就不再推荐使用(如果贸然使用的话,可能会出现性能/安全方面的问题);下面我仅介绍它还剩下的为数不多的几个方法(这些方法的共同点是Date与毫秒值的转换): 构造器 Date(): 在底层调用System.currentTimeMillis()作为日期参数.

Java 日期、时间类

Java 原本提供了 Date 和 Calendar 用于处理日期.时间的类,包括创建日期.时间对象,获取系统当前日期.时间等操作.但 Date 不仅无法实现国际化,而且它对不同属性也使用了前后矛盾的偏移量,比如月份与小时都是从0开始的,月份中的天数则是从1开始的,年又是从1900开始的,而 java.util.Calendar 则显得过于复杂,从下面介绍中会看到传统 Java 对日期.时间处理的不足.Java8 吸取了 Joda-Time 库(一个被广泛使用的日期.时间库)的经验,提供了一套全

Java日期与时间的处理/Date,String,Calendar转换

public class Demo01 { //Java中Date类和Calendar简介 public static void main(String[] args) { long now=System.currentTimeMillis(); System.out.println("now= "+now); Date d1=new Date(now); System.out.println("d1= "+d1); Calendar c1=Calendar.get

Java String类型转换成Date日期类型

插入数据库时,存入当前日期,需要格式转换 import java.text.SimpleDateFormat; formatter = new SimpleDateFormat( "yyyy-MM-dd "); String date = formatter.format(new Date());//格式化数据,取当前时间结果为 2014-10-30 String格式的数据转化成Date格式 import java.text.SimpleDateFormat; formatter =

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

Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型java.util.Date dt = new Date();System.out.println(dt.toString());   //java.util.Date的含义long lSysTime1 = dt.getTime() / 1000;   //得到秒数,Date类型的getTime()返回毫秒数 2.由long类型转换成Date类型SimpleDat

关于java日期类Date,DateFormat,SimpleDateFormat,Calendar总结

                      Date,DateFormat,SimpleDateFormat,Calendar                                      1.Date类: 在java.util包下,类 Date 表示特定的瞬间,精确到毫秒.从 JDK 1.1 开始,应该使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和分析日期字符串.Date 中的相应方法已废弃.所以Date主要用来生成时间(是网上见解,

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

1.java.util.Date类型转换成long类型java.util.Date dt = new Date();System.out.println(dt.toString());   //java.util.Date的含义long lSysTime1 = dt.getTime() / 1000;   //得到秒数,Date类型的getTime()返回毫秒数 2.由long类型转换成Date类型SimpleDateFormat sdf= new SimpleDateFormat("MM/dd