用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)代替。

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

  1. java日期和时间Date、Calendar、SimpleDateFormat

    1       时间和日期 1.1      日期类Date和格式化SimpleDateFormat 日期使用过程中需要将日期Date对象转化为字符串,或者将字符串形式的日期转化为日期Date对象.可 ...

  2. Java日期类:Date和Calendar的使用

    总是使用这两个类,总是需要百度.还不如一次全部整理完. 一.介绍: Date 类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年 ...

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

    由于java版本的迭代,一个使用java开发的项目中可能出现多种日期对象,例如LocalDateTime.LocalDate.Date,不像C#只有一个DateTime,因此在各种日期格式或者对象之间 ...

  4. java成神之——date和calendar日期的用法

    date和calendar日期的用法 util的data转换成sql的data 创建Date对象 格式化 Instant ChronoUnit LocalTime LocalDate LocalDat ...

  5. 后端日期类属性date 不接受string类型日期,都是没找到解决的方法,所有前端传回的string字符串都一一转化为java定义的类型

    1.比如日期 我们可以是yyyy-MM-dd 亦可以是 yyyy-MM-dd HH:mm:ss 方法1在java代码中需要的字段上加上注解 写上日期类型,不过这样很麻烦,每个人写了日期类型的接收前端的 ...

  6. java 后端与前端Date类型与String类型互相转换(使用注解)

    后端返回的类型中,直接定义Date类型,加上此注解,直接将Date类型转成自定义的格式给前端 class TestDateOutput{ @JsonFormat(pattern = "yyy ...

  7. Java日期处理类的相关使用

    java常用类-java日期处理类 Date类 Date类是jdk给我们提高的标准日期类,在java.util包下: 示例代码: import java.util.Date; public class ...

  8. Java日期格式化方法

    首先获取当前系统时间的方法有两种:第一种可以用currentTimeMillis()方法获取,它其实产生的是一个当前的毫秒数,这个毫秒是自1970年1月1日0时起至现在的毫秒数,类型是long 型,可 ...

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

    public class Demo01 { //Java中Date类和Calendar简介 public static void main(String[] args) { long now=Syst ...

随机推荐

  1. 设置AFNetworking网络请求的超时时间

    http://www.mamicode.com/info-detail-511816.html // 设置超时时间 [manager.requestSerializer willChangeValue ...

  2. Servlet上

    JavaWeb应用的概念 Java Web应用由一组Servlet.HTML页.类.以及其它可以被绑定的资源构成.它可以在各种供应商提供的实现Servlet规范的 Servlet容器 中运行. Jav ...

  3. 面试题目-findmax的实现

    #include <vector> #include <iostream> #include "printCollection.h" using names ...

  4. Hibernate中的一级缓存、二级缓存和懒加载

    1.为什么使用缓存 hibernate使用缓存减少对数据库的访问次数,从而提升hibernate的执行效率.hibernate中有两种类型的缓存:一级缓存和二级缓存. 2.一级缓存 Hibenate中 ...

  5. 【转】linux /centos 中OpenSSL升级方法详解

    相关软件下载地址 Apache:http://httpd.apache.org/ Nginx:http://nginx.org/en/download.html OpenSSL:http://www. ...

  6. NSURLSession使用实战教程

    我的前面两篇文章介绍了NSURLSession套件的使用和NSURLSession套件的主要类.今天我们使用NSURLSession来完成一个小的应用程序.在实战之前,我先补充一点,为什么苹果会主推N ...

  7. string(Integer)类的equals和==区别和联系(验证密码的时候用得到)

    “==”在八种原始数据类型中,判断的是两边的值是否相等.对于对象类型来说,判断的是内存地址,所以为true所满足的条件就是两边的引用指向同一个对象. 比如String s1 = "abcde ...

  8. HDU 3336 - Count the string(KMP+递推)

    题意:给一个字符串,问该字符串的所有前缀与该字符串的匹配数目总和是多少. 此题要用KMP的next和DP来做. next[i]的含义是当第i个字符失配时,匹配指针应该回溯到的字符位置. 下标从0开始. ...

  9. EasyUI 验证框使用方法

    使用过程中的一积累,备查. EasyUI 验证框使用方法://***************************missingMessage:未填写时显示的信息validType:验证类型见下示例 ...

  10. java字节数组和16进制之间的转换

    /* * To change this template, choose Tools | Templates * and open the template in the editor. */ pac ...