All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.yqjr.framework.datatype.Date Maven / Gradle / Ivy
package com.yqjr.framework.datatype;
import java.io.Serializable;
import java.sql.Timestamp;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.util.Assert;
import com.yqjr.framework.component.config.Configuration;
import com.yqjr.framework.component.context.SpringContext;
import com.yqjr.framework.component.dialect.db.AbstractDialect;
import com.yqjr.framework.component.dialect.db.DBDateInfo;
import com.yqjr.framework.utils.StringUtils;
import com.yqjr.modules.date.dao.DateDao;
/**
* ClassName: Date
* Description: 基于joda日期类
* Create By: admin
* Create Date: 2017年2月21日 下午1:31:52
* Modified By:
* Modified Date:
* Modified Content:
* Version: 1.0
*/
public class Date implements Serializable {
private static final long serialVersionUID = 8604954013805675746L;
/**
* 日期获取模式
*/
private static DateMode mode = DateMode.OS;
/**
* 日期默认格式
*/
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final DateTimeFormatter formatter = DateTimeFormat.forPattern(DEFAULT_DATE_FORMAT);
static {
mode = Enum.valueOf(DateMode.class, Configuration.getConfig().getStringValue("framework.timemode"));
}
private enum DateMode {
DB, OS;
}
private DateTime jodaDateTime;
/**
* 获取系统时间
* 根据配置文件中配置的信息,支持从操作系统/数据库两种方式的时间获取
* 参考payment.timeMode配置
*/
public Date() {
switch (mode) {
case OS:
jodaDateTime = new DateTime();
break;
case DB:
DateDao dateDao = SpringContext.getInstance().getBeanWithName("dateDao");
jodaDateTime = new DateTime(dateDao.getDefaultDateTime());
break;
default:
throw new BizzException("不能支持的timeMode");
}
}
/**
* 从指定的日期表中获取时间
*
* @param tableName
* @param column
* @param where
*/
public Date(String tableName, String column, String where) {
if (mode != DateMode.DB) {
throw new BizzException("无法从DB中获取时间,请修改框架参数");
}
DateDao dateDao = SpringContext.getInstance().getBeanWithName("dateDao");
Assert.hasText(tableName, "日期表不能为空");
Assert.hasText(column, "日期列名不能为空");
DBDateInfo dbDateInfo = AbstractDialect
.getDialect(Configuration.getConfig().getStringValue("framework.db.type")).getDateFormat();
String sql = String.format("SELECT %s(%s||' '||%s(%s,'%s'),'%s') FROM %s WHERE %s",
dbDateInfo.getToDateMethod(), column.trim(), dbDateInfo.getToCharMethod(),
dbDateInfo.getSysDateMethod(), dbDateInfo.getHHMMSS(), dbDateInfo.getDefaultDateFormat(),
tableName.trim(), where);
jodaDateTime = new DateTime(dateDao.getSpecialDateTime(sql));
}
public Date(int year, int month, int day) {
jodaDateTime = new DateTime(year, month, day, 0, 0, 0, 0);
}
public Date(long time) {
jodaDateTime = new DateTime(time, DateTimeZone.getDefault());
}
public Date(java.util.Date date) {
jodaDateTime = new DateTime(date);
}
public Date(java.sql.Date date) {
this(date.getTime());
}
public Date(Timestamp timestamp) {
this(timestamp.getTime());
}
public Date(DateTime jodaDateTime) {
Assert.notNull(jodaDateTime);
this.jodaDateTime = jodaDateTime;
}
/**
* 通过字符串的形式构建时间
* 字符串格式 yyyy-MM-dd HH:mm:ss
*
* @param time
*/
public Date(String time) {
jodaDateTime = formatter.parseDateTime(time);
}
public Date(String time, String formatter) {
jodaDateTime = DateTimeFormat.forPattern(formatter).parseDateTime(time);
}
/**
* Description: 转换成java.sql.Timestamp
* Create By: admin
* Create Data: 2017年2月21日 下午3:49:59
*
* @return Timestamp
*/
public Timestamp toTimeStamp() {
return new Timestamp(jodaDateTime.getMillis());
}
/**
* Description: 转换成java.util.Date
* Create By: admin
* Create Data: 2017年2月21日 下午3:48:45
*
* @return Date
*/
public java.util.Date toDate() {
return jodaDateTime.toDate();
}
/**
* Description: 转换成java.sql.Date
* Create By: admin
* Create Data: 2017年2月27日 上午9:01:17
*
* @return Date
*/
public java.sql.Date toSqlDate() {
return new java.sql.Date(jodaDateTime.getMillis());
}
@Override
public String toString() {
return jodaDateTime.toString(formatter);
}
/**
* Description: 按照指定的日期格式输出
* Create By: admin
* Create Data: 2017年2月27日 上午10:37:32
*
* @param formatter
* 日期格式
* @return String
*/
public String toString(String formatter) {
Assert.hasText(formatter, "输出格式不能为空");
return jodaDateTime.toString(formatter);
}
/**
* Description: 日期格式化
* Create By: admin
* Create Data: 2017年2月27日 上午11:58:11
*
* @param str String
* @param formatter String
* @return Date
*/
public Date parse(String str, String formatter) {
Assert.hasText(str, "日期不能为空");
Assert.hasText(formatter, "格式不能为空");
jodaDateTime = DateTime.parse(str, DateTimeFormat.forPattern(formatter));
return this;
}
/**
* Description: 获取日期
* Create By: admin
* Create Data: 2017年2月27日 下午1:47:45
*
* @return String
*/
public String getDate() {
return jodaDateTime.toString("yyyy-MM-dd");
}
/**
* Description: 获取月份
* Create By: admin
* Create Data: 2017年2月27日 上午11:56:30
*
* @return int
*/
public int getMonth() {
return jodaDateTime.getMonthOfYear();
}
/**
* Description: 获取当月日期
* Create By: admin
* Create Data: 2017年2月27日 上午10:47:02
*
* @return int
*/
public int getDayOfMonth() {
return jodaDateTime.getDayOfMonth();
}
/**
* Description: 获取年
* Create By: admin
* Create Data: 2017年2月27日 上午10:47:26
*
* @return int
*/
public int getYear() {
return jodaDateTime.getYear();
}
/**
* Description: 是否在某时间之前
* Create By: admin
* Create Data: 2017年2月27日 上午10:48:46
*
* @param date Date
* @return boolean
*/
public boolean isBefore(Date date) {
Assert.notNull(date);
return jodaDateTime.isBefore(date.getMillis());
}
/**
* Description: 是否在某时间之后
* Create By: admin
* Create Data: 2017年2月27日 上午10:50:10
*
* @param date Date
* @return boolean
*/
public boolean isAfter(Date date) {
Assert.notNull(date);
return jodaDateTime.isAfter(date.getMillis());
}
/**
* Description: 时间比较
* Create By: admin
* Create Data: 2017年2月27日 上午10:51:07
*
* @param date Date
* @return int
*/
public int compareTo(Date date) {
if (this.isAfter(date))
return 1;
else if (this.isBefore(date)) {
return -1;
} else
return 0;
}
/**
* Description: 复制指定的时间生成实例
* Create By: admin
* Create Data: 2017年2月27日 上午10:54:18
*
* @param date Date
* @return Date
*/
public static Date copy(Date date) {
DateTime jodaDateTime = new DateTime(date.getMillis());
return new Date(jodaDateTime);
}
/**
* Description: 获取操作系统时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:29:43
*
* @return Date
*/
public static Date newOSDate() {
DateTime jodaDateTime = new DateTime();
return new Date(jodaDateTime);
}
/**
* Description: +days后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午10:57:56
*
* @param days int
* @return Date
*/
public Date plusDays(int days) {
Assert.isTrue(days > 0);
jodaDateTime = jodaDateTime.plusDays(days);
return this;
}
/**
* Description: -days后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:05:40
*
* @param days int
* @return Date
*/
public Date minusDays(int days) {
Assert.isTrue(days > 0);
jodaDateTime = jodaDateTime.minusDays(days);
return this;
}
/**
* Description: 同getTimes
* Create By: admin
* Create Data: 2017年2月27日 上午11:06:27
*
* @return long
*/
public long getMillis() {
return jodaDateTime.getMillis();
}
/**
* Description: +months后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:07:10
*
* @param months int
* @return Date
*/
public Date plusMonths(int months) {
Assert.isTrue(months > 0);
jodaDateTime = jodaDateTime.plusMonths(months);
return this;
}
/**
* Description: -months后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:18:46
*
* @param months int
* @return Date
*/
public Date minusMonths(int months) {
Assert.isTrue(months > 0);
jodaDateTime = jodaDateTime.minusMonths(months);
return this;
}
/**
* Description: +years后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:31:44
*
* @param years int
* @return Date
*/
public Date plusYears(int years) {
Assert.isTrue(years > 0);
jodaDateTime = jodaDateTime.plusYears(years);
return this;
}
/**
* Description: -years后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:32:04
*
* @param years int
* @return Date
*/
public Date minusYears(int years) {
Assert.isTrue(years > 0);
jodaDateTime = jodaDateTime.minusYears(years);
return this;
}
/**
* Description: +minutes后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:32:18
*
* @param minutes int
* @return Date
*/
public Date plusMinutes(int minutes) {
Assert.isTrue(minutes > 0);
jodaDateTime = jodaDateTime.plusMinutes(minutes);
return this;
}
/**
* Description: -minutes后的时间
* Create By: admin
* Create Data: 2017年2月27日 上午11:32:40
*
* @param minutes int
* @return Date
*/
public Date minusMinutes(int minutes) {
Assert.isTrue(minutes > 0);
jodaDateTime = jodaDateTime.minusMinutes(minutes);
return this;
}
/**
* Description: 获取MyBatis TypeHandler名称
* Create By: admin
* Create Date: 2017年6月1日 下午5:33:24
*
* @return String
*/
public static String getTypeHandlerName() {
return DateTypeHandler.class.getName();
}
}