日期和时间工具类整理

在日常开发中常常使用日期工具, 整理到一个类中方便使用.
package com.library.utils;

import java.text.DateFormatSymbols;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import android.text.format.DateFormat;

@SuppressLint("SimpleDateFormat")
public class DateTimeUtil {

	public final static String DATE_FORMAT = "yyyy年MM月dd日    HH:mm:ss";
	public final static String DATE_FORMAT_YMDHMSA = "yyyy-MM-dd hh:mm:ss a";
	public final static String DATE_FORMAT_YMDHMS = "yyyy-MM-dd HH:mm:ss";
	public final static String DATE_FORMAT_YMDHMA = "yyyy-MM-dd hh:mm a";
	public final static String DATE_FORMAT_YMDHM = "yyyy-MM-dd HH:mm";
	public final static String DATE_FORMAT_YMD = "yyyy-MM-dd";
	public final static String DATE_FORMAT_HMA = "hh:mm a";
	public final static String DATE_FORMAT_HM = "HH:mm";
	/** 精确到毫秒 */
	public static final String FORMART = "yyyy-MM-dd HH:mm:ss SSS";
	/**
	 * utc 格式
	 */
	public static final String UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'.000+0000'";
	/**
	 * 自定义格式yyyy年MM月dd日 HH:mm
	 */
	public static final String FORMAT1 = "yyyy年MM月dd日  HH:mm";

	/**
	 * 将UTC时间转换为本地的时间
	 * 
	 * @param utcTime UTC时间字符串
	 * @return 结果时间格式
	 */
	public static String getTimeByUtc(String utcTime, String resultFormat) {
		SimpleDateFormat sdf = new SimpleDateFormat(UTC_FORMAT);
		SimpleDateFormat dspFmt = new SimpleDateFormat(resultFormat);
		String convertTime;
		Date result_date;
		long result_time = 0;
		// 如果传入参数异常,使用本地时间
		if (null == utcTime) {
			result_time = System.currentTimeMillis();
		} else {
			// 将输入时间字串转换为UTC时间
			try {
				sdf.setTimeZone(TimeZone.getTimeZone("GMT00:00"));
				result_date = sdf.parse(utcTime);
				result_time = result_date.getTime();
			} catch (Exception e) {
				// 出现异常时,使用本地时间
				result_time = System.currentTimeMillis();
				dspFmt.setTimeZone(TimeZone.getDefault());
				convertTime = dspFmt.format(result_time);
				return convertTime;
			}
		}
		// 设定时区
		dspFmt.setTimeZone(TimeZone.getDefault());
		convertTime = dspFmt.format(result_time);
		return convertTime;
	}

	/**
	 * 获取utc时间
	 * 
	 * @param timeString
	 *            本地时间字符串
	 * @param timeFormat
	 *            时间格式
	 * @return
	 */
	public static String getUtcTime(String timeString, String timeFormat) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(timeFormat);
		Date date;
		try {
			date = simpleDateFormat.parse(timeString);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 2、取得时间偏移量:
		int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
		// 3、取得夏令时差:
		int dstOffset = cal.get(Calendar.DST_OFFSET);
		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
		cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		return (String) DateFormat.format(UTC_FORMAT, cal.getTime());
	}

	/**
	 * 获取UTC时间
	 * 
	 * @param date
	 * @return
	 */
	public static String getUtcTime(Date date) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		// 2、取得时间偏移量:
		int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
		// 3、取得夏令时差:
		int dstOffset = cal.get(Calendar.DST_OFFSET);
		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
		cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		return (String) DateFormat.format(UTC_FORMAT, cal.getTime());
	}

	/**
	 * 获取UTC时间
	 * 
	 * @param calendar
	 * @return
	 */
	public static String getUtcTime(Calendar calendar) {
		// 2、取得时间偏移量:
		int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
		// 3、取得夏令时差:
		int dstOffset = calendar.get(Calendar.DST_OFFSET);
		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
		calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		return (String) DateFormat.format(UTC_FORMAT, calendar.getTime());
	}

	public static String getUtcTime(long systemTime) {
		Calendar cal = Calendar.getInstance();
		cal.setTimeInMillis(systemTime);
		// 2、取得时间偏移量:
		int zoneOffset = cal.get(Calendar.ZONE_OFFSET);
		// 3、取得夏令时差:
		int dstOffset = cal.get(Calendar.DST_OFFSET);
		// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
		cal.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
		return (String) DateFormat.format(UTC_FORMAT, cal.getTime());
	}

	/**
	 * 获取日期时间信息
	 * 
	 * @param format
	 *            日期时间样式 如:"kk:mm" ,yyyy年M月d日, yyyy-MM-dd-kk-mm-ss
	 *            详细请参考SimpleDateFormat 年-月-日-时-分-秒 刚方法可以频繁调用,不会严重延时.
	 */
	public static String getSystemDateTime(String format) {
		return (String) DateFormat.format(format, System.currentTimeMillis());
	}

	public static String getSystemDateTime(String format, long systemTime) {
		return (String) DateFormat.format(format, systemTime);
	}

	/**
	 * 系统时间是否是24小时制
	 */
	public static boolean get24HourMode(Context context) {
		return DateFormat.is24HourFormat(context);
	}

	/**
	 * 查看当前时间是上午还是下午
	 */
	public static String[] getTimeAMorPm() {
		/** 查看当前时间是上午还是下午 */
		String[] ampm = new DateFormatSymbols().getAmPmStrings();
		/*
		 * mAmString = ampm[0]; mPmString = ampm[1];
		 */
		return ampm;
	}

	static String[] weeks = { "周日", "周一", "周二", "周三", "周四", "周五", "周六", };
	static String[] weeks3 = { "日", "一", "二", "三", "四", "五", "六", };
	static String[] weeks2 = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", };

	/**
	 * 通过日期获取星期
	 * 
	 * @param date
	 * @return
	 */
	public static String getWeek(String date, String format) {
		SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.CHINA);
		Calendar mCalendar = Calendar.getInstance();
		try {
			mCalendar.setTime(dateFormat.parse(date));
		} catch (ParseException e) {
			e.printStackTrace();
			return weeks[0];
		}
		int number = mCalendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weeks[number];
	}

	public static String getWeek(Date date) {
		Calendar mCalendar = Calendar.getInstance();
		mCalendar.setTime(date);
		int number = mCalendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weeks2[number];
	}

	public static String getWeek3(Calendar mCalendar) {
		int number = mCalendar.get(Calendar.DAY_OF_WEEK) - 1;
		return weeks3[number];
	}

	public static Date str2Date(String str, String format) {
		if (TextUtils.isEmpty(str)) {
			return null;
		}
		if (TextUtils.isEmpty(format)) {
			format = FORMART;
		}
		Date date = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			date = sdf.parse(str);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return date;
	}

	public static String date2Str(Calendar c, String format) {
		if (c == null) {
			return null;
		}
		return date2Str(c.getTime(), format);
	}

	public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss
		if (d == null) {
			return null;
		}
		if (TextUtils.isEmpty(format)) {
			format = FORMART;
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		String s = sdf.format(d);
		return s;
	}

	/**
	 * 将秒转换成:x小时y分钟
	 * 
	 * @param second
	 * @return
	 */
	public static String getTime(int second) {
		if (second > 0) {
			int minute = second / 60;
			int hour = minute / 60;
			int minute2 = minute % 60;
			return hour + "小时" + minute2 + "分钟";
		}
		return "0小时0分钟";
	}
}
 
private String startAt;// 开始时间
public String getStartAt() {
   if (TextUtils.isEmpty(startAt)) {
      return "";
   }
   return DateTimeUtil.getTimeByUtc(startAt, DateTimeUtil.FORMAT1);
}

public void setStartAt(String startAt) {
   this.startAt = startAt;
}
上面的小例子,你在服务器哪里获取了一个UTC时间, 就可以通过 Model.getStartAt() 来转化成String形式去展示了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值