`
assertmyself
  • 浏览: 29712 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

服务端日期处理的类

阅读更多
服务端日期处理的类,Date相关的工具类

package com.gbcom.system.utils;

import java.sql.Timestamp;
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 javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gbcom.op.util.Assert;
import com.hc.core.utils.XMLGregorianCalendarConversionUtils;

/**
 * 服务端日期处理的类
 * 
 */
public class DateUtil {
	/**
	 * 日志记录器
	 */
	public static final Logger LOG = LoggerFactory.getLogger(DateUtil.class);

	/**
	 * 给指定的日期增加指定的时间
	 * 
	 * @param date
	 *            日期
	 * @param field
	 *            如#Calendar.MONTH #Calendar.DAY
	 * @param amount
	 *            数目,如1 加一天 -1减一天
	 * @return 增加指定时间的日期
	 */
	public static Date add(Date date, int field, int amount) {
		Calendar calendar = getCalendar(date);
		calendar.add(field, amount);
		return calendar.getTime();
	}

	/**
	 * 将传入的日期转换成今天的时间
	 * 
	 * @param date
	 *            传入的日期
	 * @return 返回今天的时间
	 */
	public static Date getTodayTime(Date date) {
		Calendar cNow = getCalendar(new Date());

		Calendar calendar = getCalendar(date);
		calendar.set(Calendar.YEAR, cNow.get(Calendar.YEAR));
		calendar.set(Calendar.MONTH, cNow.get(Calendar.MONTH));
		calendar.set(Calendar.DAY_OF_YEAR, cNow.get(Calendar.DAY_OF_YEAR));

		return calendar.getTime();
	}

	/**
	 * 返回指定日期是一周中的第几天
	 * 
	 * @param date
	 *            指定日期
	 * @return 返回指定日期是一周中的第几天
	 */
	public static int getWeek(Date date) {
		Calendar calendar = getCalendar(date);
		return calendar.get(Calendar.DAY_OF_WEEK);
	}

	/**
	 * Date转换成Calendar
	 * 
	 * @param date
	 *            Date
	 * @return Calendar
	 */
	public static Calendar getCalendar(Date date) {
		if (date == null) {
			return null;
		}
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar;
	}

	/**
	 * 两个日期相减,date1-date2,取得相差几天
	 * 
	 * @param date1
	 *            日期1
	 * @param date2
	 *            日期2
	 * @return 取得相差几天
	 */
	public static int sub(Date date1, Date date2) {
		Assert.notNull(date1);
		Assert.notNull(date2);
		long tem = date1.getTime() - date2.getTime();
		return Integer.parseInt(String.valueOf(tem / (24 * 60 * 60 * 1000)));
	}

	/**
	 * 合并时间,
	 * 
	 * @param date
	 *            年月日
	 * @param time
	 *            时分秒
	 * @return 合并后的日期
	 */
	@SuppressWarnings("deprecation")
	public static Date mergeDate(Date date, Date time) {
		Calendar calendar = getCalendar(date);
		calendar.set(Calendar.MINUTE, time.getMinutes());
		calendar.set(Calendar.HOUR_OF_DAY, time.getHours());
		return calendar.getTime();
	}

	/**
	 * 用默认风格把时间格式化成<code>yyyy-MM-dd HH:mm:ss</code> 的时间字符串
	 * 
	 * @author zhaishixi 2013-09-18
	 * @param date
	 *            时间字符串
	 * @return date
	 */
	public static String format(Object date) {
		if (date != null) {
			return DateFormat.getDateTimeInstance().format(date);
		} else {
			return null;
		}
	}
	

	/**
	 * 用默认风格把时间格式化成制定格式如<code>( yyyy-MM-dd HH:mm:ss)</code> 的时间字符串
	 * 
	 * @author zhaishixi 2013-09-26
	 * @param date
	 *            时间字符串
	 * @param pattern
	 *            the pattern describing the date and time format
	 * @return date
	 */
	public static String format(Object date, String pattern) {

		SimpleDateFormat sdf = new SimpleDateFormat(pattern);

		if (date != null) {
			return sdf.format(date);
		} else {
			return null;
		}
	}

	/**
	 * 用默认风格把date(Object 类型)按指定格式<code>pattern</code>格式化Date类型
	 * 
	 * @author zhaishixi 2013-09-26
	 * @param date
	 *            时间字符串 * @param pattern the pattern describing the date and
	 *            time format
	 * @return date
	 */
	public static Date parse(Object date, String pattern) {
		Date fd = new Date();
		if (date == null) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		try {
			fd = sdf.parse(date.toString());
		} catch (ParseException e) {
			LOG.error("parse date failed!", e);
		}
		return fd;
	}

	/**
	 * 用默认风格把date(Object 类型)按指定格式<code>pattern</code>格式化Date类型
	 * 
	 * @param date
	 *            要转换的日期
	 * @param pattern
	 *            格式
	 * @return 转换后的日期
	 */
	public static Date parseDate(Object date, String pattern) {
		Date d = new Date();
		if (date == null) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String format = sdf.format(date);
		try {
			d = sdf.parse(format);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return d;
	}

	/**
	 * 计算出离<code>beginDate日期data</code>天的日期. <li>若datas小于0表示当前日期之前data天. <li>
	 * 若datas大于0表当前日期之后data天.
	 * 
	 * @author zhaishixi 2013-09-25
	 * @param beginDate
	 *            要计算的天数
	 * @param data
	 *            间隔
	 * @return 得到日期 格式:<code>yyyy-MM-dd HH:mm:ss</code>
	 */
	public static Date getDate(Date beginDate, int data) {
		Calendar beginCal = Calendar.getInstance();
		beginCal.setTimeInMillis(beginDate.getTime());
		GregorianCalendar calendar = new GregorianCalendar(beginCal
				.get(Calendar.YEAR), beginCal.get(Calendar.MONTH), beginCal
				.get(Calendar.DATE), beginCal.get(Calendar.HOUR_OF_DAY),
				beginCal.get(Calendar.MINUTE), beginCal.get(Calendar.SECOND));
		calendar.add(GregorianCalendar.DATE, data);
		return new Date(calendar.getTimeInMillis());
	}

	/**
	 * 将时间(单位为秒) 转化为 :时 :分 : 秒格式
	 * 
	 * 该time 并非 {@link Date#getTime()} ,单位为秒
	 * 
	 * @param time
	 *            long
	 * @return String
	 */
	public static String valueOfSecond(long time) {
		long h = time / 3600;
		long m = (time % 3600) / 60;
		long s = (time % 3600) % 60;
		String value = h + "Basic_hour" + ":" + m + "Basic_min" + ":" + s
				+ "Basic_sec";
		return value;

	}

	/**
	 * 将时间(单位为分钟) 转化为 :天:时 :分格式
	 * 
	 * 该time 并非 {@link Date#getTime()} ,单位为分钟
	 * 
	 * @param time
	 *            long
	 * @return String
	 */
	public static String valueOfMinute(long time) {
		long d = time / (24 * 60);
		long h = (time % (24 * 60)) / 60;
		long m = (time % (24 * 60)) % 60;
		String value = d + "Basic_day" + ":" + h + "Basic_hour" + ":" + m
				+ "Basic_min";
		return value;

	}

	/**
	 * 返回当前月前n个月或者后n个月的第一天
	 * 
	 * @param num
	 *            n个月 isPositive 为true表示前,为false表示后
	 * @param isPositive
	 *            +/-
	 * @return n个月第一天
	 */
	@SuppressWarnings("deprecation")
	public static Date getFirstDayOfMonth(int num, boolean isPositive) {
		Date date = new Date();
		Calendar calendar = Calendar.getInstance();
		int year = calendar.getTime().getYear();
		int month = calendar.getTime().getMonth();
		if (isPositive) {
			month = month + num;
		} else {
			month = month - num;
		}
		int day = 1;
		if (month < 0) {
			year = year - 1;
			month = 11;
		} else if (month > 12) {
			year = year + 1;
			month = 0;
		}
		date = new Date(year, month, day);
		return date;
	}

	// ----------------非通用方法,谨慎使用----------------//
	/**
	 * 时间格式转换--cxf不识别java.sql.Timestamp
	 * 
	 * @param orgTime
	 *            java.sql.Timestamp
	 * @return XMLGregorianCalendar
	 */
	public static XMLGregorianCalendar timeToXmlDate(java.sql.Timestamp orgTime) {
		if (orgTime != null) {
			return XMLGregorianCalendarConversionUtils
					.asXMLGregorianCalendar(new Date(orgTime.getTime()));
		}
		return null;
	}

	/**
	 * 将xmldate转为timestamp
	 * 
	 * @param cal
	 *            XMLGregorianCalendar
	 * @return java.sql.Timestamp
	 */
	public static java.sql.Timestamp xmlDate2Time(XMLGregorianCalendar cal) {
		if (cal != null) {
			return new java.sql.Timestamp(XMLGregorianCalendarConversionUtils
					.asDate(cal).getTime());
		}
		return null;
	}

	/**
	 * 将Date类转换为XMLGregorianCalendar
	 * 
	 * @param date
	 *            Date
	 * @return XMLGregorianCalendar
	 */
	public static XMLGregorianCalendar dateToXmlDate(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		DatatypeFactory dtf = null;
		try {
			dtf = DatatypeFactory.newInstance();
		} catch (DatatypeConfigurationException e) {
		}
		XMLGregorianCalendar dateType = dtf.newXMLGregorianCalendar();
		dateType.setYear(cal.get(Calendar.YEAR));
		// 由于Calendar.MONTH取值范围为0~11,需要加1
		dateType.setMonth(cal.get(Calendar.MONTH) + 1);
		dateType.setDay(cal.get(Calendar.DAY_OF_MONTH));
		dateType.setHour(cal.get(Calendar.HOUR_OF_DAY));
		dateType.setMinute(cal.get(Calendar.MINUTE));
		dateType.setSecond(cal.get(Calendar.SECOND));
		return dateType;
	}

	/**
	 * 将XMLGregorianCalendar转换为Date
	 * 
	 * @param cal
	 *            XMLGregorianCalendar
	 * @return Date
	 */
	public static Date xmlDate2Date(XMLGregorianCalendar cal) {
		return cal.toGregorianCalendar().getTime();
	}

	/**
	 * 获取工作时间:8:30 - 17:30
	 * 
	 * @param date
	 *            String
	 * @return String[]
	 * @throws ParseException
	 *             ParseException
	 */
	public static String[] getWorkDate(String date) throws ParseException {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Calendar cd = Calendar.getInstance();
		cd.setTime(simpleDateFormat.parse(date));
		cd.add(Calendar.HOUR, 7);
		cd.add(Calendar.MINUTE, 30);

		simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		String[] workDate = new String[2];
		workDate[0] = simpleDateFormat.format(cd.getTime());

		cd.add(Calendar.HOUR, 10);
		workDate[1] = simpleDateFormat.format(cd.getTime());
		return workDate;
	}

	/**
	 * 获取当天的开始时间
	 * 
	 * @param date
	 *            指定日期
	 * @return 当前开始日期
	 */
	public static Date getCurDayStart(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
	}

	/**
	 * 获取本周的开始时间
	 * 
	 * @param date
	 *            指定日期
	 * @return 本周开始日期
	 */
	public static Date getCurWeekStart(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.setFirstDayOfWeek(Calendar.MONDAY);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		return calendar.getTime();
	}

	/**
	 * 获取当月的开始时间
	 * 
	 * @param date
	 *            指定日期
	 * @return 当月开始日期
	 */
	public static Date getCurMonthStart(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_MONTH, 1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
	}

	/**
	 * 获取当年的开始日期
	 * 
	 * @param date
	 *            指定日期
	 * @return 当年的开始日期
	 */
	public static Date getCurYearStart(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.DAY_OF_YEAR, 1);
		calendar.set(Calendar.HOUR_OF_DAY, 0);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		return calendar.getTime();
	}

	public static Date longToDate(long lg){
		//long ,转 date
		return new Date(lg);
	}
	public static long DateToLong(Date date){
		return date.getTime();
	}
	
	/**
	 * date对象指向的实体却是一个Timestamp,即date拥有Date类的方法,但被覆盖的方法的执行实体在Timestamp中。
	 * : (DateUtil.tsToDate)
	 * @param ts
	 * @return
	 */
	public static Date tsToDate(Timestamp ts){
		   Date date = new Date();  
	        try {  
	            date = ts;  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	        return date;
	}
	
	public static Timestamp DateToTs(Date date){
		 Timestamp ts = new Timestamp(date.getTime());
		 
		 return ts;
	}
	
	// off checkstyle
	public static void main(String[] args) {
		System.out.println(new Date());
		System.out.println(new Date(System.currentTimeMillis()));
		System.out.println(System.currentTimeMillis());
		System.out.println(new Date(System.currentTimeMillis()).getTime());
		System.out.println(new Date(System.currentTimeMillis()).getTime());
		// //
		// System.out.println(format(parse("20131111235959","yyyyMMddHHmmss")));
		//		
		// // LOG.info("DATA="+parse("TTT20131111235959","dsdsdsd"));
		// long var = 10201;
		// System.out.println(valueOfMinute(var));
		// System.out.println(valueOfSecond(var));
		//		
		//		
		//
		// Timestamp curTime = new Timestamp(System.currentTimeMillis());
		// XMLGregorianCalendar calendar = timeToXmlDate(curTime);
		//
		// System.out.println("calendar = " + calendar);
		//
		// Timestamp timestamp = xmlDate2Time(calendar);
		// System.out.println("timestamp = " +
		// DateTimeHelper.formatTimeGBK(timestamp));
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String time = df.format(getCurWeekStart(new Date()));
		System.out.println(time);

	}

}
分享到:
评论

相关推荐

    千年3服务端_服务端源码_千年服务端_千年3_千年3源码_千年

    文件名“千年3服务端20170222”表明这是2017年2月22日的一个版本,这为研究提供了具体的时间线索,开发者可以通过对比不同日期的源码,发现游戏服务端在时间线上的变化。 在研究千年3服务端源码的过程中,开发者...

    服务端源码

    在IT行业中,服务端开发是构建网络应用的核心部分,它负责处理客户端的请求,执行业务逻辑,并返回响应数据。在这个“服务端源码”的主题中,我们主要关注的是如何实现一个简单的服务端程序来获取并返回服务器的时间...

    风雨服务端

    1. **游戏服务器端开发**:服务端负责处理游戏逻辑、玩家交互、数据存储以及网络通信。它必须高效、稳定,以应对大量并发玩家的需求。 2. **游戏引擎**:Hero引擎作为一个游戏开发平台,提供了许多预设的游戏功能,...

    (源码)基于Spring Boot的在线答题系统服务端.zip

    # 基于Spring Boot的在线答题系统服务端 ## 项目简介 本项目是一个基于Spring Boot框架的在线答题系统服务端,主要用于提供前后分离的安卓答题应用的数据支持。... 日期处理工具 Excel文件读取工具 JSON处理工具

    silverlight 服务端生成文件

    为了实现这一目标,服务端需要一个日志处理逻辑,它接收日志数据,根据日期、严重性或其他分类标准组织它们,然后写入文件。同时,客户端的Silverlight应用需要有一个模块负责收集本地日志事件,并在适当的时候发送...

    UDTv4服务端和客户端通讯源码

    7. **获取本地时间**: 程序可能使用系统API获取当前日期和时间,这对于记录事件、创建时间戳或者同步不同设备的时间非常有用。 8. **编译环境**: 文件列表中的 "UDT-Demo.sln" 是Visual Studio的解决方案文件,意味...

    机体服务端.rar1231311

    在IT领域,"服务端"通常指的是运行在网络服务器上的应用程序,负责处理客户端(如用户设备)的请求,提供数据、执行计算或其他功能。"rar"是一种常见的文件压缩格式,用于减小文件大小以便于存储和传输。 【描述】...

    websocket++的客户端&服务端demo

    Boost库是一系列C++库的集合,包含大量高质量、跨平台的库,如线程管理、智能指针、日期时间、正则表达式等。Boost.Asio提供了异步I/O操作,使得WebSocket++可以实现非阻塞的通信,提高程序效率。 为了在Windows上...

    OPPO推送平台服务端API-V1.3.pdf

    该平台服务端API的版本号为V1.3,说明中提到了该API的历史修订记录,其中列出了自初始版本以来的各次更新内容,包括增加功能、修改接口、调整参数等,并且在后续的内容中列出了修订记录的具体人员和日期,修订的主要...

    gwt服务端及部署学习

    服务实现类`GetTimeServiceImpl`中,使用`SimpleDateFormat`格式化当前日期和时间,返回格式化的字符串。 3. **部署配置**:修改应用的部署配置文件`WEB-INF\web.xml`,添加服务端servlet的配置,确保`...

    服务端包含技术_SSI技术

    ### 服务端包含技术_SSI技术 #### 一、SSI技术概述 服务器端包含(Server Side Includes, SSI)是一种简单的服务器端脚本语言,用于在HTML文档中嵌入动态内容。它允许网页开发者将共享的页眉、页脚或其它元素放入一...

    cxf 完整的服务端客户端

    通过这个“cxf 完整的服务端客户端”示例,你可以深入理解 CXF 如何处理服务发布、服务消费、数据绑定、异常处理等核心功能,并能更好地掌握 Web 服务的开发流程。同时,对于理解和使用其他基于 Java 的 Web 服务...

    n-save网盘系统服务端 20090601_n-save.zip

    7. **并发处理**:服务端需要能处理多个用户同时操作,确保数据一致性并优化系统资源使用。 8. **性能优化**:为了提升用户体验,服务端可能会采用缓存技术、分块上传/下载、多线程处理等方法来加速操作。 9. **...

    30个java工具类

    在提供的"30个java工具类"压缩包中,我们可以看到一系列常见的工具类,涵盖了字符串处理、时间日期操作、网络通信、文件操作以及数据库连接等方面。下面将逐一解析这些工具类的主要功能和应用场景。 1. **字符串...

    FTP小程序客户端,服务端源码

    2. **FtpWebResponse类**:响应客户端的FTP请求,提供关于FTP服务器响应的信息,如状态代码、日期等。 3. **数据流操作**:在FTP传输过程中,需要使用Stream对象来读取和写入文件。例如,使用GetRequestStream()...

    实验5 服务端编程1

    实验5 "服务端编程1"主要涵盖了四个关键知识点,涉及服务器控件、内部对象的使用,以及服务器端编程的基础应用。这些知识点在ASP.NET、Java、PHP和Python等不同编程语言中都有所体现,下面将对这些内容进行详细阐述...

    JSON在JAVAWEB服务端所需JAR包

    在处理JSON时,可能需要用到其中的一些通用函数,如字符串处理、日期时间操作等。 3. **commons-collections-3.2.2.jar**:Apache Commons Collections库提供了对Java集合框架的扩展,包含各种集合的实现、迭代器、...

    notepad服务端设计文档1

    - 可维可测设计通过日志记录,便于系统监控和故障排查,日志文件按日期分割,便于管理和查询。 3. **数据库设计**: - MongoDB的使用可能涉及文档型数据模型,允许快速插入、更新和查询复杂的数据结构。 - 文档...

    Android升级更新实例,客户端+服务端

    1. **版本管理**:服务端需要维护一个版本库,记录每个版本的信息,包括版本号、更新日期、更新日志和更新包文件。 2. **接口设计**:提供一个API接口,供客户端查询最新版本。返回的数据结构应清晰,易于客户端...

    服务端(JAVA Servlet ) + 客户端( Delphi xe8 ) 三层开发

    - **用途**: 这个类作为客户端与服务器之间的通信桥梁,处理客户端发送过来的所有请求。它主要负责解析客户端请求并调用相应的业务逻辑方法。 - **关键方法**: - `doPost`: 用于处理来自客户端的HTTP POST请求,...

Global site tag (gtag.js) - Google Analytics