• java.sql.Timestamp 专题


    java.sql.Timestamp(时间戳)

    继承父类:java.util.Date

    所有已实现的接口:Serializable, Cloneable, Comparable<Date> 

    主要构造方法:Timestamp(long millis) 使用毫秒时间值构造 Timestamp 对象。

    Timestamp允许 JDBC API 将该类标识为 SQL TIMESTAMP 值。它通过允许小数秒到纳秒级精度的规范来添加保存 SQLTIMESTAMP 小数秒值的能力。

    Timestamp 也提供支持时间戳值的 JDBC 转义语法的格式化和解析操作的能力,主要用于写一些与数据库连接时的日期处理。

    例如:

    在 ResultSet中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。

    但是java.sql.Date 只存储日期数据不存储时间数据 ,这种符合规范的类型其实并没有把时分秒存进数据库,所以存取时就应该用Timestamp的setTimestamp()和

    getTimestamp()。

    整理一: String --> Timestamp: 

    Timestamp转换为String可以直接.toString(),但有时候显示时是不需要小数位后面的毫秒值,需要借助DateFormat在转换为String时重新定义格式。

    使用Timestamp的valueOf()方法, 

    Timestamp time= new Timestamp(System.currentTimeMillis());//获取系统当前时间   
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    String timeStr = df.format(time);   
    time = Timestamp.valueOf(timeStr);   
    System.out.println(time);//2017-05-06 15:54:21.0

    整理二: java.util.Date --> Timestamp

    方式1: 使用Timestamp的构造方法

    Date date = new Date();  
    Timestamp ts = new Timestamp(date.getTime());

    方式2:

    注意:父类不能直接向子类转化,需要借助中间的String,并且format的格式要与Timestamp的字符串类型格式相匹配

    java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

    Date date = new Date();    
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
    String dateStr = sdf.format(date);  
    Timestamp ts = Timestamp.valueOf(dateStr); //2017-05-06 15:54:21.0

    整理三:

    通过构造方法创建Timestamp 对象,获取毫秒值有下面三种方法:

    方法1:

    System.currentTimeMillis(); 

    方法2:

    Calendar.getInstance().getTimeInMillis(); 

    方法3: 

    new Date().getTime();

    测试证明:System.currentTimeMillis() 这种方式速度最快

    Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,因为Canlendar因为要处理时区问题会耗费很多的时间。

    所以建议多使用第一种方式。

    方法摘要 

    boolean after(Timestamp ts) 

            指示此 Timestamp 对象是否晚于给定的 Timestamp 对象。 

    boolean before(Timestamp ts) 

            指示此 Timestamp 对象是否早于给定的 Timestamp 对象。 

    int compareTo(Date o) 

            将此 Timestamp 对象与给定的 Date(必须为 Timestamp 对象)相比较。 

    int compareTo(Timestamp ts) 

            将此 Timestamp 对象与给定 Timestamp 对象相比较。 

    boolean equals(Object ts) 

            测试此对象是否等于给定的 Timestamp 对象。 

    boolean equals(Timestamp ts) 

            测试此 Timestamp 对象是否等于给定的 Timestamp 对象。 

    int getNanos() 

            获取此 Timestamp 对象的 nanos 值。 

    long getTime() 

            返回此 Timestamp 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。 

    void setNanos(int n) 

            将此 Timestamp 对象的 nanos 字段设置为给定值。 

    void setTime(long time) 

            设置此 Timestamp 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 

    String toString() 

            使用 JDBC 时间戳转义格式编排时间戳。 

    static Timestamp valueOf(String s) 

            将使用 JDBC 时间戳转义格式的 String 对象转换为 Timestamp 值。 

    实例代码:

    tLotteryAnnouncement.setDateTime(new Timestamp(System.currentTimeMillis()));  
    if(StringUtils.isNotBlank(tIsusesKj.getOpenTime())){  
        tLotteryAnnouncement.setOpenTime(Timestamp.valueOf(tIsusesKj.getOpenTime()));  
    }else{  
        tLotteryAnnouncement.setOpenTime(new Timestamp(tIsusesKj.getModifyDate().getTime()));  
    }



    Java里得到00:00:00格式的时分秒的Timestamp

     
    import java.sql.Timestamp;
    import java.text.SimpleDateFormat;
    import java.util.TimeZone;
    
    public class Test {
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            long t = System.currentTimeMillis();
            t = t / (1000 * 3600 * 24) * (1000 * 3600 * 24);
            System.out.println(sdf.format(new Timestamp(t)));
            t = System.currentTimeMillis();
            t = t / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
            System.out.println(sdf.format(new Timestamp(t)));
        }
    }
    2022-08-06 08:00:00
    2022-08-06 00:00:00

    1 Java.util.Date
    包含年、月、日、时、分、秒信息。

    代码如下:

    // String转换为Date
    String dateStr="2013-8-13 23:23:23";
    String pattern="yyyy-MM-dd HH:mm:ss";
    DateFormate dateFormat=new SimpleDateFormat(pattern);
    Date date=dateFormat.parse(dateStr);
    date=dateFormat.format(date);


    2 Java.sql.Date
    包含年、月、日信息。
    继承自java.util.Date。在数据库相关操作中使用,如rs.getDate,ps.setDate等。rs是指ResultSet,ps是指PreparedStatement。

    代码如下:

    // java.util.Date转换为java.sql.Date
    new java.sql.Date(utilDate.getTime());// 其中utilDate为java.util.Date类型的对象


    3 Java.util.Calendar
    包含年、月、日、时、分、秒、毫秒信息。
    JDK1.1引入,用以代替java.util.Date。

    代码如下:

    // Date转为Calendar
    Date date=new Date();
    Calendar calendar=Calendar.getInstance();
    calendar.setTime(date);

    // Calendar转为Date
    Calendar ca=Calendar.getInstance(); &nbsp;
    Date d =(Date) ca.getTime();

    4 Java.sql.Timestamp
    包含年、月、日、时、分、秒、纳秒(nano)信息。
    继承自java.util.Date。比java.sql.Date包含更多信息。在数据库相关操作中使用,如rs.getTimestamp,ps.setTimeStamp等。
    例如:若数据库中某字段hireDate为Oracle的Date类型,则使用getTimestamp时能够将年、月、日、时、分、秒信息取出;
    但使用getDate时则只能取出年、月、日信息。因此,一般推荐使用getTimestamp。
    代码如下:

    // java.util.Calendar转换为java.sql.Timestamp
    new Timestamp(Calendar.getInstance().getTimeInMillis());
    // java.util.Date转换为java.sql.Timestamp
    new Timestamp(date.getTime());
    // String转换为java.sql.Timestamp,String格式:yyyy-mm-dd hh:mm:ss[.f...] ,方括号表示可选
    Timestamp.valueOf("2013-07-06 01:49:30");

    5 Oracle数据库提供的日期和时间类型
    Oracle数据库提供了DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE四种类型。

    DATE包含世纪、年、月、日、时、分、秒信息。
    TIMESTAMP是DATE的扩展,包含年、月、日、时、分、秒和fractional seconds信息。定义TIMESTAMP的格式如下:

    代码如下:

    TIMESTAMP [(fractional_seconds_precision)]
    // 格式
    TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF'
    // 一个例子
    TIMESTAMP '1997-01-31 09:26:50.12'

    其中fractional_seconds_precision是可选的,用于指定秒使用含几位小数的浮点数表示,它的取值范围是0到9,默认是6。上述例子中表示采用两位小数,它的秒值是50.12。注意:12不是毫秒值,也不是微秒值。
     
     
     

    Java8 LocalDateTime与timestamp转换

    将timestamp转为LocalDateTime

    1
    2
    3
    4
    public LocalDateTime timestamToDatetime(long timestamp){
      Instant instant = Instant.ofEpochMilli(timestamp);
      return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
     }

    将LocalDataTime转为timestamp

    1
    2
    3
    4
    public long datatimeToTimestamp(LocalDateTime ldt){
      long timestamp = ldt.toInstant(ZoneOffset.of("+8")).toEpochMilli();
      return timestamp;
     }

    我在网上还找到了另一个将datetime转为时间戳的方法:

    1
    2
    ZoneId zone = ZoneId.systemDefault();
    long timestamp = ldt.atZone(zone).toInstant().toEpochMilli();

    Java8的时间转为时间戳的大概的思路就是LocalDateTime先转为Instant,设置时区,然后转timestamp。

    附一个Java8中的LocalDateTime工具类

    工具类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    import java.time.*;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.ChronoUnit;
    import java.time.temporal.TemporalUnit;
    import java.util.Date;
     
    /*
     * @author kingboy
     * @Date 2017/7/22 下午2:12
     * @Description LocalDateTimeUtils is used to Java8中的时间类
     */
    public class LocalDateTimeUtils {
     
      //获取当前时间的LocalDateTime对象
      //LocalDateTime.now();
     
      //根据年月日构建LocalDateTime
      //LocalDateTime.of();
     
      //比较日期先后
      //LocalDateTime.now().isBefore(),
      //LocalDateTime.now().isAfter(),
     
      //Date转换为LocalDateTime
      public static LocalDateTime convertDateToLDT(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
      }
     
      //LocalDateTime转换为Date
      public static Date convertLDTToDate(LocalDateTime time) {
        return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
      }
     
     
      //获取指定日期的毫秒
      public static Long getMilliByTime(LocalDateTime time) {
        return time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
      }
     
      //获取指定日期的秒
      public static Long getSecondsByTime(LocalDateTime time) {
        return time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
      }
     
      //获取指定时间的指定格式
      public static String formatTime(LocalDateTime time,String pattern) {
        return time.format(DateTimeFormatter.ofPattern(pattern));
      }
     
      //获取当前时间的指定格式
      public static String formatNow(String pattern) {
        return formatTime(LocalDateTime.now(), pattern);
      }
     
      //日期加上一个数,根据field不同加不同值,field为ChronoUnit.*
      public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) {
        return time.plus(number, field);
      }
     
      //日期减去一个数,根据field不同减不同值,field参数为ChronoUnit.*
      public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field){
        return time.minus(number,field);
      }
     
      /**
       * 获取两个日期的差 field参数为ChronoUnit.*
       * @param startTime
       * @param endTime
       * @param field 单位(年月日时分秒)
       * @return
       */
      public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
        Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime));
        if (field == ChronoUnit.YEARS) return period.getYears();
        if (field == ChronoUnit.MONTHS) return period.getYears() * 12 + period.getMonths();
        return field.between(startTime, endTime);
      }
     
      //获取一天的开始时间,2017,7,22 00:00
      public static LocalDateTime getDayStart(LocalDateTime time) {
        return time.withHour(0)
            .withMinute(0)
            .withSecond(0)
            .withNano(0);
      }
     
      //获取一天的结束时间,2017,7,22 23:59:59.999999999
      public static LocalDateTime getDayEnd(LocalDateTime time) {
        return time.withHour(23)
            .withMinute(59)
            .withSecond(59)
            .withNano(999999999);
      }
     
    }

    测试类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    import com.kingboy.common.utils.date.LocalDateTimeUtils;
    import org.junit.Test;
    import java.time.LocalDateTime;
    import java.time.temporal.ChronoUnit;
     
    import static com.kingboy.common.utils.date.LocalDateTimeUtils.getDayEnd;
    import static com.kingboy.common.utils.date.LocalDateTimeUtils.getDayStart;
     
    /**
     * @author kingboy
     * @Date 2017/7/22 下午7:16
     * @Description LocaDateTimeUtilsTest is used to 测试LocalDateTime工具
     */
    public class LocaDateTimeUtilsTest {
     
      @Test
      public void format_test() {
        System.out.println(LocalDateTimeUtils.formatNow("yyyy年MM月dd日 HH:mm:ss"));
      }
     
      @Test
      public void betweenTwoTime_test() {
        LocalDateTime start = LocalDateTime.of(1993, 10, 13, 11, 11);
        LocalDateTime end = LocalDateTime.of(1994, 11, 13, 13, 13);
        System.out.println("年:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.YEARS));
        System.out.println("月:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.MONTHS));
        System.out.println("日:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.DAYS));
        System.out.println("半日:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.HALF_DAYS));
        System.out.println("小时:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.HOURS));
        System.out.println("分钟:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.MINUTES));
        System.out.println("秒:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.SECONDS));
        System.out.println("毫秒:" + LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.MILLIS));
        //=============================================================================================
        /*
                       年:1
                       月:13
                       日:396
                       半日:792
                       小时:9506
                       分钟:570362
                       秒:34221720
                       毫秒:34221720000
        */
      }
     
      @Test
      public void plus_test() {
        //增加二十分钟
        System.out.println(LocalDateTimeUtils.formatTime(LocalDateTimeUtils.plus(LocalDateTime.now(),
            20,
            ChronoUnit.MINUTES), "yyyy年MM月dd日 HH:mm"));
        //增加两年
        System.out.println(LocalDateTimeUtils.formatTime(LocalDateTimeUtils.plus(LocalDateTime.now(),
            2,
            ChronoUnit.YEARS), "yyyy年MM月dd日 HH:mm"));
        //=============================================================================================
        /*
                        2017年07月22日 22:53
                        2019年07月22日 22:33
         */
      }
     
      @Test
      public void dayStart_test() {
        System.out.println(getDayStart(LocalDateTime.now()));
        System.out.println(getDayEnd(LocalDateTime.now()));
        //=============================================================================================
        /*
                        2017-07-22T00:00
                    2017-07-22T23:59:59.999999999
         */
      }
     
    }
     

    一、String与Date(java.util.Date)互转

         1.1 String -> Date

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    String dateStr = "// ::"
        Date date = new Date(); 
       //注意format的格式要与日期String的格式相匹配 
       DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
       try
         date = sdf.parse(dateStr); 
          System.out.println(date.toString()); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        }
     String dateStr = "2010/05/04 12:34:23";
     Date date = new Date();
     //注意format的格式要与日期String的格式相匹配
     DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     try {
      date = sdf.parse(dateStr);
      System.out.println(date.toString());
     } catch (Exception e) {
      e.printStackTrace();
     }

      1.2 Date -> String

       日期向字符串转换,可以设置任意的转换格式format

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    String dateStr = ""
       Date date = new Date(); 
       //format的格式可以任意 
        DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
       DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss"); 
        try
          dateStr = sdf.format(date); 
         System.out.println(dateStr); 
          dateStr = sdf.format(date); 
          System.out.println(dateStr); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        }
     String dateStr = "";
     Date date = new Date();
     //format的格式可以任意
     DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     DateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH/mm/ss");
     try {
      dateStr = sdf.format(date);
      System.out.println(dateStr);
      dateStr = sdf2.format(date);
      System.out.println(dateStr);
     } catch (Exception e) {
      e.printStackTrace();
     }

     二、String与Timestamp互转

      2.1 String ->Timestamp

       使用Timestamp的valueOf()方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Timestamp ts = new Timestamp(System.currentTimeMillis()); 
        String tsStr = "-- ::"
         try
           ts = Timestamp.valueOf(tsStr); 
           System.out.println(ts); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        }
     Timestamp ts = new Timestamp(System.currentTimeMillis());
     String tsStr = "2011-05-09 11:49:45";
     try {
      ts = Timestamp.valueOf(tsStr);
      System.out.println(ts);
     } catch (Exception e) {
      e.printStackTrace();
     }

       注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f...] 这样的格式,中括号表示可选,否则报错!!!

        如果String为其他格式,可考虑重新解析下字符串,再重组~~

        2.2 Timestamp -> String

      使用Timestamp的toString()方法或者借用DateFormat

    Timestamp ts = new Timestamp(System.currentTimeMillis()); 
        String tsStr = ""
        DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
        try
          //方法一 
          tsStr = sdf.format(ts); 
         System.out.println(tsStr); 
         //方法二 
        tsStr = ts.toString(); 
          System.out.println(tsStr); 
        } catch (Exception e) { 
         e.printStackTrace(); 
       }
     Timestamp ts = new Timestamp(System.currentTimeMillis());
     String tsStr = "";
     DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
     try {
      //方法一
      tsStr = sdf.format(ts);
      System.out.println(tsStr);
      //方法二
      tsStr = ts.toString();
      System.out.println(tsStr);
     } catch (Exception e) {
      e.printStackTrace();
     }

     很容易能够看出来,方法一的优势在于可以灵活的设置字符串的形式。

    三、Date( java.util.Date )和Timestamp互转

      声明:查API可知,Date和Timesta是父子类关系

      3.1 Timestamp -> Date

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Timestamp ts = new Timestamp(System.currentTimeMillis()); 
       Date date = new Date(); 
       try
         date = ts; 
          System.out.println(date); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        }
     Timestamp ts = new Timestamp(System.currentTimeMillis());
     Date date = new Date();
     try {
      date = ts;
      System.out.println(date);
     } catch (Exception e) {
      e.printStackTrace();
     }

     很简单,但是此刻date对象指向的实体却是一个Timestamp,即date拥有Date类的方法,但被覆盖的方法的执行实体在Timestamp中。

       3.2 Date -> Timestamp

       父类不能直接向子类转化,可借助中间的String~~~~

    1
    2
    3
    4
    5
    6
    7
    8
    9
    java.sql.Date 只存储日期数据不存储时间数据
    // 会丢失时间数据
    preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
    //可以这样来处理
    preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime()));
     //想要得到完整的数据,包括日期和时间,可以这样
    java.util.Date d = resultSet.getTimestamp(1);
    //这样处理更合适一些,可以避免一些潜在Timestamp 问题
    java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());

    自己补的话,这样的话:

            往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值 构造一个Timestamp对象 存进数据库中。

           从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个java.util.Date对象,这样就可以对这个Date对象操作了。不如说 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等

    java.sql.Timestamp(时间戳)

    继承父类:java.util.Date

    所有已实现的接口:Serializable, Cloneable, Comparable<Date> 

    主要构造方法:Timestamp(long millis) 使用毫秒时间值构造 Timestamp 对象。

    Timestamp允许 JDBC API 将该类标识为 SQL TIMESTAMP 值。它通过允许小数秒到纳秒级精度的规范来添加保存 SQLTIMESTAMP 小数秒值的能力。

    Timestamp 也提供支持时间戳值的 JDBC 转义语法的格式化和解析操作的能力,主要用于写一些与数据库连接时的日期处理。

    例如:

    在 ResultSet中我们经常使用的setDate或getDate的数据类型是java.sql.Date,而在平时java程序中我们一般习惯使用 java.util.Date。

    但是java.sql.Date 只存储日期数据不存储时间数据 ,这种符合规范的类型其实并没有把时分秒存进数据库,所以存取时就应该用Timestamp的setTimestamp()和

    getTimestamp()。

    整理一: String --> Timestamp: 

    Timestamp转换为String可以直接.toString(),但有时候显示时是不需要小数位后面的毫秒值,需要借助DateFormat在转换为String时重新定义格式。

    使用Timestamp的valueOf()方法, 

    1
    2
    3
    4
    5
    Timestamp time= new Timestamp(System.currentTimeMillis());//获取系统当前时间  
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    String timeStr = df.format(time);  
    time = Timestamp.valueOf(timeStr);  
    System.out.println(time);//2017-05-06 15:54:21.0

    整理二: java.util.Date --> Timestamp

    方式1: 使用Timestamp的构造方法

    1
    2
    Date date = new Date(); 
    Timestamp ts = new Timestamp(date.getTime());

    方式2:

    注意:父类不能直接向子类转化,需要借助中间的String,并且format的格式要与Timestamp的字符串类型格式相匹配

    java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

    1
    2
    3
    4
    Date date = new Date();   
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
    String dateStr = sdf.format(date); 
    Timestamp ts = Timestamp.valueOf(dateStr); //2017-05-06 15:54:21.0

    整理三:

    通过构造方法创建Timestamp 对象,获取毫秒值有下面三种方法:

    方法1:

    System.currentTimeMillis(); 

    方法2:

    Calendar.getInstance().getTimeInMillis(); 

    方法3: 

    new Date().getTime();

    测试证明:System.currentTimeMillis() 这种方式速度最快

    Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,因为Canlendar因为要处理时区问题会耗费很多的时间。

    所以建议多使用第一种方式。

    方法摘要 

    boolean after(Timestamp ts) 

            指示此 Timestamp 对象是否晚于给定的 Timestamp 对象。 

    boolean before(Timestamp ts) 

            指示此 Timestamp 对象是否早于给定的 Timestamp 对象。 

    int compareTo(Date o) 

            将此 Timestamp 对象与给定的 Date(必须为 Timestamp 对象)相比较。 

    int compareTo(Timestamp ts) 

            将此 Timestamp 对象与给定 Timestamp 对象相比较。 

    boolean equals(Object ts) 

            测试此对象是否等于给定的 Timestamp 对象。 

    boolean equals(Timestamp ts) 

            测试此 Timestamp 对象是否等于给定的 Timestamp 对象。 

    int getNanos() 

            获取此 Timestamp 对象的 nanos 值。 

    long getTime() 

            返回此 Timestamp 对象表示的自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。 

    void setNanos(int n) 

            将此 Timestamp 对象的 nanos 字段设置为给定值。 

    void setTime(long time) 

            设置此 Timestamp 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。 

    String toString() 

            使用 JDBC 时间戳转义格式编排时间戳。 

    static Timestamp valueOf(String s) 

            将使用 JDBC 时间戳转义格式的 String 对象转换为 Timestamp 值。 

    实例代码:

    1
    2
    3
    4
    5
    6
    tLotteryAnnouncement.setDateTime(new Timestamp(System.currentTimeMillis())); 
    if(StringUtils.isNotBlank(tIsusesKj.getOpenTime())){ 
        tLotteryAnnouncement.setOpenTime(Timestamp.valueOf(tIsusesKj.getOpenTime())); 
    }else
        tLotteryAnnouncement.setOpenTime(new Timestamp(tIsusesKj.getModifyDate().getTime())); 
    }









     



     

  • 相关阅读:
    聊聊面试-NoClassDefFoundError 和 ClassNotFoundException 区别
    聊聊面试-int和Integer的区别
    数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
    SQL Server数据库阻塞,死锁查询
    数据误操作,教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
    IDEA将Maven项目中指定文件夹下的xml等文件编译进classes
    Tomcat 中文乱码,设置UTF-8
    C#实现前向最大匹、字典树(分词、检索)
    23种设计模式汇总
    Head First设计模式——原型模式和访问者模式
  • 原文地址:https://www.cnblogs.com/softidea/p/16556727.html
Copyright © 2020-2023  润新知