//-------------------------------------------------
// Litchi Game Server Framework
// Copyright(c) 2019 phantaci <phantacix@qq.com>
// MIT Licensed
//-------------------------------------------------
package litchi.core.common.utils;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
//import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 日期时间工具类
*
* @author 0x737263
*
*/
public class DateUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(DateUtils.class);
/** 1秒钟的毫秒数*/
public static final int SECOND_MILLISECOND = 1000;
/** 1分钟的毫秒数*/
public static final int MINUTE_MILLISECOND = 60 * 1000;
/** 1小时的毫秒数*/
public static final long HOUR_MILLISECOND = 60 * MINUTE_MILLISECOND;
/** 1天的毫秒数*/
public static final long DAY_MILLISECOND = 24 * HOUR_MILLISECOND;
/** 1分钟的秒数*/
public static final long MINUTE_SECOND = 60;
/** 1小时的秒数*/
public static final long HOUR_SECOND = 60 * MINUTE_SECOND;
/** 1天的秒数*/
public static final long DAY_SECOND = 24 * HOUR_SECOND;
/** HH:mm*/
public static final String PATTERN_HH_MM = "HH:mm";
/** HH:mm::ss*/
public static final String PATTERN_HH_MM_SS = "HH:mm:ss";
/** yyyyMMdd*/
public static final String PATTERN_YYYYMMDD = "yyyyMMdd";
/** yyyy-MM-dd*/
public static final String PATTERN_YYYY_MM_DD = "yyyy-MM-dd";
/** yyyyMMddHH*/
public static final String PATTERN_YYYYMMDDHH = "yyyyMMddHH";
/** yyyyMMddHHmm*/
public static final String PATTERN_YYYYMMDDHHMM = "yyyyMMddHHmm";
/** yyyy-MM-dd HH:mm:ss*/
public static final String PATTERN_NORMAL = "yyyy-MM-dd HH:mm:ss";
/** yyyyMMddHHmmss*/
public static final String PATTERN_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
/** 1周的总天数 */
public static final int ONE_WEEK_DAY = 7;
/** 1天的小时数 */
public static final int ONE_DAY_HOUR = 24;
public static Integer getYear() {
return getCalendar().get(Calendar.YEAR);
}
/**
* 是不否为今天
* @param second utc转换忧的秒
* @return
*/
public static boolean isToday(int second) {
return isToday(second * 1000L);
}
public static Calendar getCalendar() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(ServerTime.timeMillis());
return calendar;
}
/**
* 是不否为今天
* @param millis 毫秒
* @return
*/
public static boolean isToday(long millis) {
Calendar today = getCalendar();
Calendar compareday = getCalendar();
compareday.setTimeInMillis(millis);
if (today.get(Calendar.YEAR) == compareday.get(Calendar.YEAR) && today.get(Calendar.MONTH) == compareday.get(Calendar.MONTH)
&& today.get(Calendar.DAY_OF_MONTH) == compareday.get(Calendar.DAY_OF_MONTH)) {
return true;
}
return false;
}
/**
* 是否为昨天
* @param second
* @return
*/
public static boolean isYesterday(int second) {
return isYesterday(second * 1000L);
}
/**
* 是否为昨天
* @param time
* @return
*/
public static boolean isYesterday(long time) {
Calendar today = getCalendar();
Calendar yestCalendar = getCalendar();
long nowMills = today.getTimeInMillis();
long yesterdayTime = nowMills - 86400000L;
// 1天前的日期
yestCalendar.setTimeInMillis(yesterdayTime);
Calendar compareCalendar = getCalendar();
compareCalendar.setTimeInMillis(time);
if (yestCalendar.get(Calendar.YEAR) == compareCalendar.get(Calendar.YEAR)
&& yestCalendar.get(Calendar.MONTH) == compareCalendar.get(Calendar.MONTH)
&& yestCalendar.get(Calendar.DAY_OF_MONTH) == compareCalendar.get(Calendar.DAY_OF_MONTH)) {
return true;
}
return false;
}
/**
* 获取今天指定时间的Date
*
* @param hour
* @param minute
* @param seconds
* @param millSenconds
* @return
*/
public static Calendar getSpecialTimeOfToday(int hour, int minute, int seconds, int millSenconds) {
Calendar cal = getCalendar();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, seconds);
cal.set(Calendar.MILLISECOND, millSenconds);
return cal;
}
/**
* 日期转换为字符串
*
* @param theDate 日期
* @param datePattern {@code DatePattern}
* @return
*/
public static String date2String(Date theDate, String datePattern) {
if (theDate == null) {
return "";
}
DateFormat format = new SimpleDateFormat(datePattern);
try {
return format.format(theDate);
} catch (Exception e) {
LOGGER.error("", e);
}
return "";
}
/**
* 字符串转换为Date对象
* @param dateString 日期字符串
* @param datePattern {@code DatePattern}
* @return
*/
public static Date string2Date(String dateString, String datePattern) {
if ((dateString == null) || (dateString.trim().isEmpty())) {
return null;
}
DateFormat format = new SimpleDateFormat(datePattern);
try {
return format.parse(dateString);
} catch (ParseException e) {
LOGGER.error("ParseException in converting string to date: " + e.getMessage());
}
return null;
}
/**
* 毫秒转换为秒
* @param millis 毫秒
* @return
*/
public static long toSecond(long... millis) {
long second = 0L;
if ((millis != null) && (millis.length > 0)) {
long[] arrayOfLong = millis;
int j = millis.length;
for (int i = 0; i < j; ++i) {
long time = arrayOfLong[i];
second += time / 1000L;
}
}
return second;
}
/**
* 日期修改
*
* @param theDate 日期
* @param addHours 增加天
* @param addMinutes 增加分
* @param addSecond 增加秒
* @return
*/
public static Date add(Date theDate, int addHours, int addMinutes, int addSecond) {
if (theDate == null) {
return null;
}
Calendar cal = getCalendar();
cal.setTime(theDate);
cal.add(11, addHours);
cal.add(12, addMinutes);
cal.add(13, addSecond);
return cal.getTime();
}
/**
* 获取下一天的整点时间
* @param hour
* @return
*/
public static Date getNextDayHour(int hour) {
Calendar cal = getCalendar();
cal.setTimeInMillis(new Date().getTime() + DAY_MILLISECOND);
return new GregorianCalendar(cal.get(1), cal.get(2), cal.get(5), hour, 0).getTime();
}
/**
* 获取今天的整点时间
* @return
*/
public static Date getTodayHour(int hour) {
Calendar cal = getCalendar();
cal.setTimeInMillis(new Date().getTime());
return new GregorianCalendar(cal.get(1), cal.get(2), cal.get(5), hour, 0).getTime();
}
/**
* 当前时间转换为秒
*
* @return
*/
public static long getCurrentSecond() {
return ServerTime.timeMillis(); // 转换为秒
}
/**
* 判断到目前为止是否超过了指定的时间区间
*
* @param startTime
* @param timeInterval
* @return
*/
public static boolean beyondTheTime(long startTime, int timeInterval) {
return getNow() - startTime >= timeInterval;
}
/**
* 判断到目前为止是否超过了指定的时间区间
*
* @param startTime
* @param timeInterval
* @return
*/
public static boolean beyondTheTime(long startTime, long timeInterval) {
return ServerTime.timeMillis() - startTime >= timeInterval;
}
/**
* 判断是否在时间区间内
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static boolean isActiveTime(int startTime, int endTime) {
return startTime < getNow() && getNow() < endTime;
}
/**
* 判断是否在时间区间内
*
* @param startTime 开始时间(毫秒)
* @param endTime 结束时间(毫秒)
* @return
*/
public static boolean isActiveTime(long startTime, long endTime) {
long now = ServerTime.timeMillis();
return startTime < now &
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一款高性能、实时通信、多进程的游戏解决方案 适用于手游、h5游戏等各类高性能游戏服务器的开发 功能特点 基于Disruptor消息队列设计的无锁并发模式 分布式(多进程)架构,几行代码实现一个功能服务器的搭建 多线程设计,注解方式配置,轻松管理所有消息流 强大的RPC功能,调用远程RPC近似于调用本地函数,无需手工定义内部协议 支持插件功能,轻松实现功能插件 框架基于netty设计,轻松定义外部协议 简单的策划配置管理,可实现多条件查询配置 构建环境 java 8 + gradle 4.0+ 第三方引用 Netty 宇宙最强的java网络库,可定义各种网络通信方式,本框架中RPC、http、websocket等都基于netty的封装。 Disruptor 高性能线程间消息传递库,通过它来实现“消息中心”,跨线程消息传递so easy! HikariCP 稳定、高性能的JDBC连接池。github star破11k! logback 快速、灵活的日志库,log4j作者的续作。 fastjson 马爸爸家的json库,看名字就知道快! okhttp3 http client库,真的很ok~
资源推荐
资源详情
资源评论
收起资源包目录
一款分布式的java游戏服务器框架,具备高性能、可伸缩、分布式、多线程等特点,java 8 +gradle 4.0 (201个子文件)
gradlew.bat 2KB
.gitignore 110B
build.gradle 2KB
gradlew 5KB
gradle-wrapper.jar 53KB
DateUtils.java 31KB
FastJdbc.java 19KB
Litchi.java 13KB
CRCUtils.java 13KB
RedisSortedSet.java 11KB
SQLQueueComponent.java 10KB
DBQueueComponent.java 10KB
HttpController.java 10KB
DataConfigComponent.java 9KB
RpcClientComponent.java 9KB
StringUtils.java 9KB
RedisHash.java 9KB
RedisComponent.java 8KB
Storage.java 8KB
CollectionUtils.java 8KB
NumberUtils.java 8KB
Http.java 7KB
RedisList.java 7KB
StaticFileServerHandler.java 7KB
PathResolver.java 7KB
FileUtils.java 7KB
NettyRpcClient.java 7KB
JSONDataParser.java 6KB
LocalFileDataConfigSource.java 6KB
PatternRouter.java 6KB
GateSessionService.java 6KB
SSLUtils.java 6KB
HttpServerHandler.java 6KB
XMLDataParser.java 6KB
EventComponent.java 6KB
RedisKeyValue.java 5KB
Router.java 5KB
WebSocketServerHandler.java 5KB
Schedule.java 5KB
NodeInfo.java 5KB
PathPattern.java 4KB
DefaultProtobufHandlerRoute.java 4KB
RedisSet.java 4KB
TableInfo.java 4KB
NettyRpcServer.java 4KB
WebSocketServer.java 4KB
Table.java 4KB
SelectStatement.java 4KB
RouteResult.java 4KB
RouteComponent.java 4KB
NodeSessionService.java 4KB
MapColumn.java 3KB
HttpServer.java 3KB
JsonEntityParser.java 3KB
RandomUtils.java 3KB
DisruptorService.java 3KB
DefaultRouteFilter.java 3KB
RouteInfo.java 3KB
DataStorage.java 3KB
RedisConfig.java 3KB
RegisterNodeHandler.java 3KB
ZipUtils.java 3KB
NettySession.java 3KB
RequestPacket.java 3KB
DBEntity2File.java 3KB
PathUtils.java 3KB
UpdateStatement.java 3KB
ColumnContext.java 2KB
ObjectUtils.java 2KB
RedisDataConfigSource.java 2KB
HexUtils.java 2KB
RpcFuture.java 2KB
WebSocketEncoder.java 2KB
AbstractStatement.java 2KB
WebSocketDecoder.java 2KB
DefaultRpcRoute.java 2KB
DispatcherComponent.java 2KB
RpcCallbackHandler.java 2KB
StringColumn.java 2KB
SetColumn.java 2KB
DataConfig.java 2KB
SuperTable.java 2KB
ReflectUtils.java 2KB
Constants.java 2KB
MessageThread.java 2KB
WebSocketServerInitializer.java 2KB
IndexObject.java 2KB
ListColumn.java 2KB
ProtoStuffSerializer.java 2KB
HeartbeatHandler.java 2KB
JsonColumn.java 2KB
JsonUtils.java 2KB
GateSession.java 1KB
BaseChannelHandler.java 1KB
DelayedSession.java 1KB
RpcFutureContext.java 1KB
OsUtils.java 1KB
RpcEncoder.java 1KB
RequestPacketExecutor.java 1KB
LogUtils.java 1KB
共 201 条
- 1
- 2
- 3
资源评论
白话机器学习
- 粉丝: 8185
- 资源: 7687
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功