文档章节

DateTimeUtil的 工具时间 java操作类

tengX前端工程师
 tengX前端工程师
发布于 2018/09/10 17:39
字数 1667
阅读 21
收藏 0

package com.app.mvc.util;

import com.google.common.base.Strings;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Created by jimin on 15/11/29.
 */

public class DateTimeUtil {

    private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_PATTERN = "yyyy-MM-dd";
    private static final String TIME_PATTERN = "HH:mm:ss";
    private static final String ALL_PATTERN = "yyyyMMddHHmmss";

    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern(DATE_PATTERN);
    public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern(DATETIME_PATTERN);
    public static final DateTimeFormatter TIME_FORMATTER = DateTimeFormat.forPattern(TIME_PATTERN);
    public static final DateTimeFormatter ALL_FORMATTER = DateTimeFormat.forPattern(ALL_PATTERN);

    /**
     * 提供string->DateTime的转换,只支持以下的格式:
     * <ol>
     * <li>yyyy-MM-dd HH:mm:ss</li>
     * <li>yyyy-MM-dd</li>
     * </ol>
     * </p>
     * <p/>
     * 无需进行指定,工具能够自动识别具体的格式
     *
     * @param date 只支持两种
     * @return
     */
    public static DateTime jodaOf(String date) {
        checkArgument(!Strings.isNullOrEmpty(date));//fast fail
        DateTime d;
        if (date.contains(":")) {//弱判断
            d = DateTime.parse(date, DATETIME_FORMATTER);
        } else {
            d = DateTime.parse(date, DATE_FORMATTER);
        }
        return d;
    }

    /**
     * 根据不同的pattern进行构造DateTime对象
     *
     * @param date
     * @param pattern
     * @return
     */
    public static DateTime jodaOf(String date, String pattern) {
        checkArgument(!Strings.isNullOrEmpty(date));//fast fail
        return DateTime.parse(date, DateTimeFormat.forPattern(pattern));
    }

    /**
     * 解析时间字符串
     *
     * @param date
     * @return
     */
    public static Date dateOf(String date) {
        return toDate(jodaOf(date));
    }

    /**
     * 解析时间字符串
     *
     * @param date
     * @return
     */
    public static Time timeOf(String date) {
        return toTime(jodaOf(date));
    }

    /**
     * 解析时间字符串
     *
     * @param date
     * @return
     */
    public static Timestamp timestampOf(String date) {
        return toTimestamp(jodaOf(date));
    }

    /**
     * 解析时间字符串
     *
     * @param date
     * @return
     */
    public static java.sql.Date sqlDateOf(String date) {
        return toSqlDate(jodaOf(date));
    }

    /**
     * 简化创建joda 的 DateTime方式
     * 等价于:new DateTime(unixStamp);
     *
     * @param unixStamp
     * @return
     */
    public static <T extends Date> DateTime jodaOf(T unixStamp) {
        checkNotNull(unixStamp);
        return new DateTime(unixStamp);
    }

    /**
     * joda 转换为 Date的便捷方法
     *
     * @param dateTime
     * @return
     */
    public static java.util.Date toDate(DateTime dateTime) {
        checkNotNull(dateTime);
        return dateTime.toDate();
    }

    /**
     * joda 转换为 Date的便捷方法
     *
     * @param dateTime
     * @return
     */
    public static java.sql.Date toSqlDate(DateTime dateTime) {
        checkNotNull(dateTime);
        return new java.sql.Date(dateTime.getMillis());
    }

    /**
     * joda 转换为 Time的便捷方法
     *
     * @param dateTime
     * @return
     */
    public static Time toTime(DateTime dateTime) {
        checkNotNull(dateTime);
        return new Time(dateTime.getMillis());
    }

    /**
     * joda 转换为 Timestamp的便捷方法
     *
     * @param dateTime
     * @return
     */
    public static Timestamp toTimestamp(DateTime dateTime) {
        checkNotNull(dateTime);
        return new Timestamp(dateTime.getMillis());
    }

    /**
     * 提供DateTime->String的转换
     * <pre>
     *        System.out.println(dateFrom(new DateTime(2014,9,2,3,0,0)));
     *        --> 2014-09-02
     * </pre>
     *
     * @param date
     * @return
     */
    public static String dateFrom(DateTime date) {
        checkNotNull(date);
        return date.toString(DATE_PATTERN);
    }

    /**
     * --> 2014-09-02
     *
     * @param date
     * @return
     */
    public static <T extends Date> String dateFrom(T date) {
        checkNotNull(date);
        return dateFrom(new DateTime(date));
    }

    /**
     * 提供DateTime->String的转换
     * <pre>
     *        System.out.println(dateTimeFrom(new DateTime(2014,9,2,3,0,0)));
     *        -->2014-9-2 03:00:00
     * </pre>
     *
     * @param dateTime
     * @return
     */
    public static String dateTimeFrom(DateTime dateTime) {
        checkNotNull(dateTime);
        return dateTime.toString(DATETIME_PATTERN);
    }

    /**
     * -->2014-9-2 03:00:00
     *
     * @param dateTime
     * @return
     */
    public static <T extends Date> String dateTimeFrom(T dateTime) {
        checkNotNull(dateTime);
        return dateTimeFrom(new DateTime(dateTime));
    }

    /**
     * 提供DateTime->String的转换
     * <pre>
     *        System.out.println(timeFrom(new DateTime(2014,9,2,3,0,0)));
     *        -->03:00:00
     * </pre>
     *
     * @param time
     * @return
     */
    public static String timeFrom(DateTime time) {
        checkNotNull(time);
        return time.toString(TIME_FORMATTER);
    }

    public static String allFrom(DateTime time) {
        checkNotNull(time);
        return time.toString(ALL_FORMATTER);
    }

    /**
     * -->03:00:00
     *
     * @param time
     * @return
     */
    public static <T extends Date> String timeFrom(T time) {
        checkNotNull(time);
        return timeFrom(new DateTime(time));
    }

    /**
     * 进行日期的格式化
     *
     * @param input   日期
     * @param pattern 模式,参考joda日期格式
     * @param <T>     从date继承的日期对象
     * @return
     */
    public static <T extends Date> String formatTime(T input, String pattern) {
        return jodaOf(input).toString(DateTimeFormat.forPattern(pattern));
    }

    /**
     * 进行日期的格式化
     *
     * @param input   从1970-01-01 00:00:00的毫秒时间
     * @param pattern 模式,参考joda日期格式
     * @return
     */
    public static String formatTime(long input, String pattern) {
        return jodaOf(new Date(input)).toString(DateTimeFormat.forPattern(pattern));
    }

    /**
     * 创建对象并增加n天
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T addDays(T ts, int amount) {
        checkArgument(amount >= 0, "days必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).plusDays(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并增加n分钟
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T addMinutes(T ts, int amount) {
        checkArgument(amount >= 0, "minutes必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).plusMinutes(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并增加n小时
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T addHours(T ts, int amount) {
        checkArgument(amount >= 0, "hours必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).plusHours(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并增加n秒钟
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T addSeconds(T ts, int amount) {
        checkArgument(amount >= 0, "seconds必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).plusSeconds(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并增加n个月
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T addMonth(T ts, int amount) {
        checkArgument(amount >= 0, "month必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).plusMonths(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象并减少n天
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T minusDays(T ts, int amount) {
        checkArgument(amount >= 0, "days必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).minusDays(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并减少分钟
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T minusMinutes(T ts, int amount) {
        checkArgument(amount >= 0, "minutes必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).minusMinutes(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并减少n小时
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T minusHours(T ts, int amount) {
        checkArgument(amount >= 0, "hours必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).minusHours(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并减少n秒钟
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T minusSeconds(T ts, int amount) {
        checkArgument(amount >= 0, "seconds必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).minusSeconds(amount).getMillis());
        return cloned;
    }

    /**
     * 创建对象,并减少n个月
     *
     * @param ts
     * @param amount
     * @param <T>
     * @return
     */
    public static <T extends Date> T minusMonth(T ts, int amount) {
        checkArgument(amount >= 0, "month必须 >= 0 ");
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).minusMonths(amount).getMillis());
        return cloned;
    }

    /**
     * 几号?[1-31]
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int dayOfMonth(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getDayOfMonth();
    }

    /**
     * 周几?[1-7]
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int dayOfWeek(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getDayOfWeek();
    }

    /**
     * 年内第多少天?[1-365]
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int dayOfYear(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getDayOfYear();
    }

    /**
     * 几点?24小时制
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int hourOfDay(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getHourOfDay();
    }

    /**
     * 几分?[1-60]
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int minuteOfHour(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getMinuteOfHour();
    }

    /**
     * 几秒?[1-60]
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> int secondOfMinute(T ts) {
        checkNotNull(ts);
        return new DateTime(ts.getTime()).getSecondOfMinute();
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-03-02 00:00:00
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T firstOfDay(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).getMillis());
        return cloned;
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-03-02 23:59:59
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T lastOfDay(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).plusDays(1).minusSeconds(1).getMillis());
        return cloned;
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-03-01 00:00:00
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T firstOfMonth(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).withDayOfMonth(1).getMillis());
        return cloned;
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-03-31 23:59:59
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T lastOfMonth(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).withDayOfMonth(1).plusMonths(1).minusSeconds(1).getMillis());
        return cloned;
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-12-31 23:59:59
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T lastOfYear(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).withDayOfYear(1).minusSeconds(1).plusYears(1).getMillis());
        return cloned;
    }

    /**
     * 2014-03-02 23:00:23 -> 2014-01-01 00:00:00
     *
     * @param ts
     * @param <T>
     * @return
     */
    public static <T extends Date> T firstOfYear(T ts) {
        checkNotNull(ts);
        T cloned = (T) ts.clone();
        cloned.setTime(new DateTime(ts.getTime()).withTime(0, 0, 0, 0).withDayOfMonth(1).withDayOfYear(1).getMillis());
        return cloned;
    }

    /**
     * 当前时间的timestamp
     *
     * @return
     */
    public static Timestamp currentTimestamp() {
        return new Timestamp(System.currentTimeMillis());
    }

    /**
     * 当前毫秒时间
     *
     * @return
     */
    public static long currentMillis() {
        return System.currentTimeMillis();
    }

}
 

© 著作权归作者所有

tengX前端工程师

tengX前端工程师

粉丝 41
博文 104
码字总数 90112
作品 0
广州
程序员
私信 提问
java8中的时间处理0 - api介绍

Java 8 Date Time API是我们java开发一直寻找的时间处理工具。java从一开始设计的时间类就让人头疼,好在现在终于有了java8。 为什么我们需要这套API 只要是有这么几个理由: Java的日期和时...

davelet
2018/02/22
0
0
扩展 JDT 实现自动代码注释与格式化

简介: 本文介绍了一个为 Eclipse 工作空间中的 Java 代码自动添加统一注释并格式化排版的工具及其具体实现。该工具扩展 Eclipse Java Development Tool(JDT)API,操作 Java 代码。通过本文...

红薯
2010/07/30
1K
1
Java 8时间和日期API 20例

伴随lambda表达式、streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。Java处理日期、日历和时间的方式一直为社区所诟病,将...

黄梦巍
2015/06/19
0
0
淘宝Tprofiler工具实现分析

项目首页:https://github.com/alibaba/TProfiler 工具介绍 TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对...

伍咖
2015/11/14
0
0
Android中各个 Java 包的功能描述

在Android的应用程序开发中,通常使用的是JAVA语言,除了需要熟悉JAVA语言的基础知识之外,还需要了解Android提供的扩展的JAVA功能 在一般的JAVA应用中,如果需用引用基础类库,通常需要使用...

红薯
2009/06/15
808
0

没有更多内容

加载失败,请刷新页面

加载更多

php 遇到 No input file specified的解决方法

(一)IIS Noinput file specified 方法一:改PHP.ini中的doc_root行,打开ini文件注释掉此行,然后重启IIS 方法二: 请修改php.ini 找到 ; cgi.force_redirect = 1 去掉前面分号,把后面的1...

chenhongjiang
今天
5
0
MySQL 基础

一、常用命令 在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令 # 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到mysql -u账...

华山猛男
今天
6
0
简单的博客系统(四)Django请求HTML页面视图信息--基于函数的视图

1. 编写用于查询数据的功能函数 应用目录 下的 views.py 文件通常用于保存响应各种请求的函数或类 from django.shortcuts import renderfrom .models import BlogArticles# Create your ...

ZeroBit
今天
5
0
用脚本将本地照片库批量导入到Day One中

因为目前iCloud 空间已经不足,其中95%都是照片,之前入手了DayOne,且空间没有限制,订阅费一年也不少,再加上DayOne作为一款日记App 也比较有名,功能方面最大的就是地理视图与照片视图,尤...

在山的那边
昨天
21
0
jupyter部署安装

python373 -m ipykernel install --name python373 ipython kernelspec list sc create myjupyterservice binpath="D:\apply\Python373\Scripts\jupyter-notebook --config=V:/my_work/jupyt......

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部