java 时间相关的类互相转换

今天在读取solr中的时间时,发现又是一堆时间格式转来转去,现在总结下之前工程中都遇到的关于时间的转换,这里主要是以java的类做总结:

一. Timestamp 与 Date( java.util.Date )互转

Date是Timestamp的父类!

1.1 Timestamp ->Date :

// date对象指向的实体是一个timestamp,这是父类引用指向子类对象。
public Date TimestampToDate(Timestamp timestamp) {
    Date date = new Date();
    try {
        date = timestamp;
        return date;
    }catch(Exception e) {
        e.printStackTrace();
    }
}

1.2 Date -> Timestamp :

//父类不能直接向子类转化,其实很简单;
Timestamp timestamp = new Timestamp(date.getTime());

二. Timestamp 与 String互转

2.1 Timestamp -> String:

一种是以直接timestamp.toString();

或者利用DateFormat;

public String timestampToString(Timestamp timestamp) {
    String tsStr = “”;
    DateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);
    try {
        //方法一
        tsStr = timestamp.toString();
        //方法二
        tsStr = sdf.format(timestamp);
        return tsStr;
    } catch (Exception e) {
        e.printStackTrace();
        return tsStr;
    }
}

2.2 String-> Timestamp:

Timestamp timestamp = Timestamp.valueOf(tsStr);  

注:String的类型必须形如: yyyy-mm-dd hh:mm:ss[.f…] 格式。

三. Date( java.util.Date )与 String 互转

3.1 Date -> String:

 public String dateToString(Date date, String format) {
    //format: “yyyy/MM/dd HH:mm:ss”
    String dateStr="";
    DateFormat sdf = new SimpleDateFormat(format);
    try {
        dateStr = sdf.format(date);
        return dateStr;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

3.2 String->Date:

public Date stringToDate(String dateStr,String format) {
  Date date = new Date();
  //注意format的格式要与日期String的格式相匹配
  //format1: Locale.US
  //format: “yyyy/MM/dd HH:mm:ss”
  //DateFormat sdf1 = new SimpleDateFormat(format1,Locale.US);
  DateFormat sdf = new SimpleDateFormat(format); 

  try {
      date = sdf.parse(dateStr);
      return date;
  } catch (Exception e) {
      e.printStackTrace();
      return null;
  }
}

四. Calendar相关功能模块

4.1 DateUtil有关calendar的一部分:

/**
         * 获取某一个月的第一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getFirstDayOfMonth(Calendar calendar) {

            calendar.set(Calendar.DATE, 1);        // 设置当前月第一天
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 获取某一的开始时间
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getFirstTimeOfDay(Calendar calendar) {

            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 获取某一天的最后时间
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastTimeOfDay(Calendar calendar) {

            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);          

            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 获取某一个月的最后一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastDayOfMonth(Calendar calendar) {

            calendar.set(Calendar.DATE, 1);        // 设置当前月的1号

            calendar.set(Calendar.HOUR_OF_DAY, 23);
            calendar.set(Calendar.MINUTE, 59);
            calendar.set(Calendar.SECOND, 59);

            calendar.add(Calendar.MONTH, 1);    // 加一个月,变为下月的1号
            calendar.add(Calendar.DATE, -1);    // 减一天,变为当前月的最后一天

            return new Timestamp(calendar.getTimeInMillis());
        }

        /**
         * 计算两个日期之间相差的天数
         * @param costTime
         * @param receivableTime
         * @return
         */
        public static int getDays(Date end,Date start){
            Calendar aCalendar = Calendar.getInstance();
            Calendar bCalendar = Calendar.getInstance();
            aCalendar.setTime(end);
            bCalendar.setTime(start);
            int days = 0;
            while(aCalendar.before(bCalendar)){
                days++;
                aCalendar.add(Calendar.DAY_OF_YEAR, 1);
            }

            if(days==0){
                aCalendar.setTime(start);
                bCalendar.setTime(end);
                while(aCalendar.before(bCalendar)){
                    days++;
                    aCalendar.add(Calendar.DAY_OF_YEAR, 1);
                }
            }
            return days;
        }

        /**
         * 计算两个月份之间相差的月份数
         * @param costTime
         * @param receivableTime
         * @return
         */
        public static int getMonths(Date end,Date start){
            Calendar aCalendar = Calendar.getInstance();
            Calendar bCalendar = Calendar.getInstance();
            aCalendar.setTime(end);
            bCalendar.setTime(start);
            int months = 0;
            while(aCalendar.before(bCalendar)){
                months++;
                aCalendar.add(Calendar.MONTH, 1);
            }

            if(months==0){
                aCalendar.setTime(start);
                bCalendar.setTime(end);
                while(aCalendar.before(bCalendar)){
                    months++;
                    aCalendar.add(Calendar.MONTH, 1);
                }
            }
            return months;
        }

        /**
         * 获取某一个月的最后一天
         * @param month
         * @param Timestamp
         * @return
         */
        public static Timestamp getLastMonthTime(Calendar calendar) {

            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);

            calendar.add(Calendar.MONTH, -1);    // 减一个月,变为上个月的开始

            return new Timestamp(calendar.getTimeInMillis());
        }

4.2 每天固定一个时间点起程序:

除了以下的代码,当然也可以里spring配置文件实现,更简单。

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7); // 早上7点
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime();
// 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于当前的时间
// 此时要在 第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
    Calendar startDT = Calendar.getInstance();
    startDT.setTime(date);
    startDT.add(Calendar.DAY_OF_MONTH, 1);
    date = startDT.getTime();
}

Timer timer = new Timer();
TaskMain task = new TaskMain();//TaskMain是我的任务线程
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task, date, PERIOD_DAY);

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 08:35:42

java 时间相关的类互相转换的相关文章

java 字节流和字符流转换类InputStreamReader,OutPutStreamReader

import java.io.*; public class BufferDemo { public static void main(String[] args) throws IOException { BufferedReader buf=null; buf=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Please enter a number:"); String str=buf

字符串转换成java.util.date类型和将java.util.date类型转换成java.sql.date类型

//将字符串转换成java.util.date类型 DateFormat format = new SimpleDateFormat("yyyyMMDD"); Date date1 = format.parse(startDate); //将java.util.date类型转换成java.sql.date类型 skg.statStartTime = new java.sql.Date(date1.getTime()); skg.statEndTime = new java.sql.Da

java笔记--String类格式化当天日期转换符文档

String类格式化当天日期 转换符:%tb : 格式化为月份的英文缩写%tB : 格式化为月份的英文全写%ta : 格式化为星期%tA : 格式化为星期%ty : 格式化为两位年份值%tY : 格式化为四位年份值%tm : 格式化为两位月份值%td : 格式化为两位日期值%te : 格式化为星期一位日期值%tH : 格式化为两位24时制小时值(00-23)%tk : 格式化为两位24时制小时值(0-23)%tI : 格式化为两位12时制小时值(01-12)%tl : 格式化为两位12时制小时值

Java基础知识强化35:String类之String类的转换功能

1. String类的转换功能 byte[] getBytes() char[] toCharArray() static String valueOf(char[] chs) static String valueOf(int i ) String toLowerCase() String toUpperCase() String concat(String str) 2. 案例: 1 package cn.itcast_05; 2 3 /* 4 * String的转换功能: 5 * byte

时间相关的类

与时间相关的类主要有 Date类.SimpleDateFormat类和Calendar类.其中最常用的就是Date类.SimpleDateFormat类. Date类: 类 Date 表示特定的瞬间,精确到毫秒. 常用方法: 1.Date()           分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒). 2.Date(long date)           分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为"历元(epoch)",即 197

Java Utils工具类大全

源码和jar见:https://github.com/evil0ps/utils #Java Utils --- 封装了一些常用Java操作方法,便于重复开发利用. 另外希望身为Java牛牛的你们一起测试和完善,欢迎入群263641914 一起封装和完成常用的Java代码. 节约撸码时间以方便有更多的时间去把妹子- #开发环境 Win7x64 JDK1.7 IDEA14 #项目结构 │ README.md │ utils.iml │ ├─.idea │ ├─conf │ configFTP.pr

Java 时间相关

java的时间主要关注这几个类,查看Java API 1.6 java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR.MONTH.DAY_OF_MONTH.HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法.瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量. 该类还为实现包范围外的具体日历系统提供了其他字段和方法

java之常用类的用法

知识点: 包装类基本知识 JAVA并不是纯面向对象的语言.Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的. 但是我们在实际使用中经常需要将基本数据转化成对象,便于操作.比如:集合的操作中. 例如使用Map对象要操作put()方法时,需要传入的参数是对象而不是基本数据类型. 为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class). 1)定义:将基本类型封装成类,其中包含属性和

【转载】Java中String类的方法及说明

转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(Strin