自己需要的日期格式

package com.ebizwindow.crm.utils;

import java.text.FieldPosition;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 时间日期格式化类
 *
 * @author yeyong
 *
 */
public class PrettyDateFormat extends SimpleDateFormat {
	private static final long serialVersionUID = 1L;
	private Pattern pattern = Pattern.compile("(‘*)(#{1,2}|@)");
	private FormatType formatType = FormatType.DEAFULT;
	private SimpleDateFormat simpleDateFormat;

	private enum FormatType {
		DEAFULT, TIME, DAY
	};

	/**
	 * 构造器
	 * <p>
	 * format中的@表示[XXX秒前,XXX分钟前,XXX小时前(最多是23小时前)]
	 * <p>
	 * format中的#表示[空字串(表示今天),昨天,前天]
	 * <p>
	 * format中的##表示[今天,昨天,前天]
	 *
	 * @param format
	 *            和SimpleDateFormat中的格式设置基本上是一样的,只是多的@格式 #格式和##格式
	 * @param fullFormat
	 *            和SimpleDateFormat中的格式设置是一样的
	 */
	public PrettyDateFormat(String format, String fullFormat) {
		super(fullFormat);
		Matcher m = pattern.matcher(format);
		while (m.find()) {
			if (m.group(1).length() % 2 == 0) {
				if ("@".equals(m.group(2))) {
					if (formatType == FormatType.DAY) {
						throw new IllegalArgumentException("#和@模式字符不能同时使用.");
					}
					formatType = FormatType.TIME;
				} else {
					if (formatType == FormatType.TIME) {
						throw new IllegalArgumentException("#和@模式字符不能同时使用.");
					}
					formatType = FormatType.DAY;
				}
			}
		}
		this.simpleDateFormat = new SimpleDateFormat(format.replace("‘", "‘‘"));
	}

	@Override
	public Object parseObject(String source, ParsePosition pos) {
		throw new UnsupportedOperationException("暂时还不支持的操作");
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see java.text.SimpleDateFormat#format(java.util.Date,
	 * java.lang.StringBuffer, java.text.FieldPosition)
	 */
	public StringBuffer format(Date date, StringBuffer toAppendTo,
			FieldPosition pos) {
		if (formatType == FormatType.DEAFULT) {
			return super.format(date, toAppendTo, pos);
		}

		long curTime = System.currentTimeMillis();

		long diffDay = 0L;
		long diffSecond = 0L;
		if (formatType == FormatType.TIME) {
			diffSecond = (curTime - date.getTime()) / 1000L;
			if (diffSecond < 0 || diffSecond >= 86400) {
				return super.format(date, toAppendTo, pos);
			}
		}
		if (formatType == FormatType.DAY) {
			Calendar curDate = new GregorianCalendar();
			curDate.setTime(new Date(curTime));
			curDate.set(Calendar.HOUR_OF_DAY, 23);
			curDate.set(Calendar.MINUTE, 59);
			curDate.set(Calendar.SECOND, 59);
			curDate.set(Calendar.MILLISECOND, 999);
			diffDay = (curDate.getTimeInMillis() - date.getTime()) / 86400000L;
			if (diffDay < 0 || diffDay > 2) {
				return super.format(date, toAppendTo, pos);
			}
		}
		StringBuffer sb = new StringBuffer();
		Matcher m = pattern.matcher(simpleDateFormat.format(date));
		if (m.find()) {
			String group2 = m.group(2);
			String replacement = "";
			while (true) {
				if ("@".equals(group2)) {
					if (diffSecond < 60) {
						replacement = diffSecond == 0 ? "1秒前" : diffSecond
								+ "秒前";
					} else if (diffSecond < 3600) {
						replacement = diffSecond / 60 + "分钟前";
					} else if (diffSecond < 86400) {
						replacement = diffSecond / 3600 + "小时前";
					}
				} else {
					if (diffDay == 0) {
						replacement = group2.length() == 2 ? "今天" : "";
					} else if (diffDay == 1) {
						replacement = "昨天";
					} else {
						replacement = "前天";
					}
				}
				m.appendReplacement(sb, replacement);
				if (!m.find()) {
					break;
				}
			}
			m.appendTail(sb);
		}
		return toAppendTo.append(sb.toString());
	}
}

  

时间: 2024-10-22 00:51:17

自己需要的日期格式的相关文章

php日期格式

php获取系统当前日期 <?php echo $showtime=date("Y-m-d H:i:s");?>   显示的格式: 年-月-日 小时:分钟:秒 相关时间参数: a - "am" 或是 "pm" A - "AM" 或是 "PM" d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31" D - 星期几,三个英文字母; 如:

Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传的xls文件(文件格式见下user.xls),解析不为空的行与列,写入数据库. 文件user.xls格式为: 下面来看代码实例演示: 一.前端jsp页面(本来内容很多,这里精简了) <%@ page language="java" contentType="text/htm

利用SQL模糊匹配来验证字段是否是日期格式

最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 '2016-05-03 23:21:35.0', 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后使用了最常规的like来模糊匹配,虽然比不上正则匹配那么精准,但也够用了. 思路: 一个下划线代表一个字符,那'2016-05-03 23:21:35.0'可以表示成'____-__-__-__.__.__.______'. 当然这种办法比较笨,不能识别是数字还是字母还是字符,当然更好的办法是编写U

python- 按照日期格式(xxxx-xx-xx)每日生成一个文件

请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2013-09-23.log, 并且把磁盘的使用情况写到到这个文件中. #!/usr/bin/env python #!coding=utf-8 import time import os new_time = time.strftime('%Y-%m-%d') //time.strftime()可以用来获得当前时间,可以将时间格式化为字符串 disk_status = os.popen('df -h').read

php中时间戳和日期格式的转换

一,PHP时间戳函数获取指定日期的unix时间戳 strtotime(”2009-1-22″) 示例如下: echo strtotime(”2009-1-22″) 结果:1232553600 说明:返回2009年1月22日0点0分0秒时间戳 二,PHP时间戳函数获取英文文本日期时间 示例如下: 便于比较,使用date将当时间戳与指定时间戳转换成系统时间 (1)打印明天此时的时间戳strtotime(”+1 day”) 当前时间:echo date(”Y-m-d H:i:s”,time()) 结果

Delphi使用TryStrToDate判断字符串是否为日期格式

var minDate, maxDate: TDateTime; ...... dateseparator := '-'; // 日期分隔符 shortdateformat := 'yy-mm-dd'; // 短日期格式 longdateformat := 'yyyy-mm-dd'; // 长日期格式 application.UpdateFormatSettings := false; ...... if not TryStrToDate(edtDate1.Text, minDate) then

SQLserver中用convert函数转换日期格式

SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用convert函数转换日期格式 SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 2004-09-12 11:06:08.177 整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(), 120

EasyUI修改DateBox和DateTimeBox的默认日期格式

最近整理Easyui控件的时候,对Easyui的DateBox控件和DateTimeBox控件进行了梳理,而我之所以将EasyUI的DateBox控件和DateTimeBox控件放在一起,归为一类,是因为这两个控件没有什么区别,如果你非得说这两个控件有区别,也无非是DateTimeBox控件后面除了基本的年月日之外带上了小时或者分钟或者秒什么的,更何况,这两个控件在进行日期格式化时所采用的方法也是一样的. DateBox介绍: Demo实例参看: http://www.jeasyui.com/d

js 时间戳转为日期格式

js 时间戳转为日期格式 什么是Unix时间戳(Unix timestamp): Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix系统.类Unix系统中,也在许多其他操作系统中被广泛采用. 目前相当一部分操作系统使用32位二进制数字表示时间.此类系统的Unix时间戳最多可以使用到格林威治

Winpython Spyder template.py模板日期格式的修改

WinPython中自带的Spyder编辑器默认模板文件是template.py,其中显示日期的参数是"%(date)s",创建一个新py文件时,显示的日期格式是英文的,看起来很不习惯. 通过下面的方法可以把日期格式改成"年-月-日 时:分:秒"的形式,或者其它自己喜欢的格式. 1.用文本编辑器打开C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\Lib\site-packages\spyderlib\plugins\edi