JAVA 中日期类获取或转换

本文提供了一系列日期处理的实用方法,包括获取某个月份的最后一天、获取指定日期所在月份的所有天数、转换UTC时间和本地时间、获取指定时间的一小时前及一天前的日期等。适用于Java开发者快速实现日期相关功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 获取某月的最后一天
 * @param: date 例如 :2017-04
 */
public static String getLastDayOfMonth(String date) {
    int year = Integer.valueOf(date.substring(0,4));
    int month = Integer.valueOf(date.substring(5,7));
    Calendar cal = Calendar.getInstance();
    //设置年份
    cal.set(Calendar.YEAR,year);
    //设置月份
    cal.set(Calendar.MONTH, month-1);
    //获取某月最大天数
    int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    //设置日历中月份的最大天数
    cal.set(Calendar.DAY_OF_MONTH, lastDay);
    //格式化日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String lastDayOfMonth = sdf.format(cal.getTime());
    return lastDayOfMonth;

}

 

/**
 * 指定日期所在月份天数的集合
 * @param date  2017-04
 * @return
 */
private static int[] getMonthDays(String date) {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
    calendar.set(Calendar.MONTH, Integer.parseInt(date.substring(5, 7)) -1);
    int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
    int[] days = new int[maxDay];
    for(int i = 1; i <= maxDay; i++){
        days[i-1] = i;
    }
    return days;
}

 
//根据今年获取明年 例如 :知道今年2017  date 可以2017 ,2017-01 ,2017-01-03
public static int getNextYear(String date){
    String startTime = "";
    String endTime = "";
    int year = 0;
    try{
        Date date1 = new SimpleDateFormat("yyyy").parse(date);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date1);
        year = cal.get(Calendar.YEAR)+1;
    }catch (ParseException e){
        e.printStackTrace();
    }
    return year;
}
//获取当月包含每天日期的list

 
public List<String> getMonthlyList(){
    int[] daysInMonth = getMonthDays("2017-11");
    List<String> timeList = new ArrayList<>(); //指定月份的每天日期的集合
    for(int value: daysInMonth){
        if (value<10){
            timeList.add("2017-11"+"-0"+value);
        }else{
            timeList.add("2017-11"+"-"+value);
        }
    }
    System.out.println(timeList);
    //运行结果:[2017-11-01, 2017-11-02, 2017-11-03, 2017-11-04, 2017-11-05, 2017-11-06, 2017-11-07, 2017-11-08, 
    // 2017-11-09, 2017-11-10, 2017-11-11, 2017-11-12, 2017-11-13, 2017-11-14, 2017-11-15, 2017-11-16, 2017-11-17, 
    // 2017-11-18, 2017-11-19, 2017-11-20, 2017-11-21, 2017-11-22, 2017-11-23, 2017-11-24, 2017-11-25, 2017-11-26,
    // 2017-11-27, 2017-11-28, 2017-11-29, 2017-11-30]
    return timeList;
}

 

/**
 * 将utc时间转换为北京时间
 * @param UTCStr utc时间字符串
 * @param format 转换类型
 * @return
 * @throws ParseException
 */
public static String UTCToCST(String UTCStr, String format) throws ParseException {
    Date date = null;
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    date = sdf.parse(UTCStr);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + 8);
    return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
}

/**
 * local时间转换成UTC时间
 * @param localTime
 * @return
 */
public static String localToUTC(String localTime) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    Date localDate= null;
    try {
        localDate = sdf.parse(localTime);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    long localTimeInMillis=localDate.getTime();
    /** long时间转换成Calendar */
    Calendar calendar= Calendar.getInstance();
    calendar.setTimeInMillis(localTimeInMillis);
    /** 取得时间偏移量 */
    int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);
    /** 取得夏令时差 */
    int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);
    /** 从本地时间里扣除这些差量,即可以取得UTC时间*/
    calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
    /** 取得的时间就是UTC标准时间 */
    Date utcDate=new Date(calendar.getTimeInMillis());
    return format1.format(utcDate);
}

 
	/**
	 * 获取一小时前的日期
	 * @param date
	 * @return
	 */
	public static String getBeforeHour(String date) {
		String beforeHour = "";
		try{
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date date1 = df.parse(date);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date1);
			calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY)-1);
			beforeHour = df.format(calendar.getTime());
//			System.out.println("1小时前时间为:"+df.format(calendar.getTime()));
		}catch (ParseException e){
			e.printStackTrace();
		}
		return beforeHour;
	}

	/**
	 * 获取一天前的日期
	 * @param date
	 * @return
	 */
	public static String getBeforeDate(String date) {
		String dateTime = "";
		try {
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
			Date date1 = df.parse(date);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date1);
			calendar.set(Calendar.DATE,calendar.get(Calendar.DATE)-1);
			dateTime = df.format(calendar.getTime()) +" 23:59:59";
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dateTime;
	}

	/**
	 * @Description: long类型转换成日期
	 *
	 * @param lo 毫秒数
	 * @return String yyyy-MM-dd HH:mm:ss
	 */
	public static String longToDate(long lo){
		Date date = new Date(lo);
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sd.format(date);
	}

	/**
	 * @Description: String类型毫秒数转换成日期
	 * [@param](http://my.oschina.net/param) lo 毫秒数
	 * @return String yyyy-MM-dd HH:mm:ss
	 */
	public static String stringToDate(String lo){
		long time = Long.parseLong(lo);
		Date date = new Date(time);
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return sd.format(date);
	}


//输出指定两个日期之间的所有日期
	public static List<String> getTimeScope(String date1, String date2){
		List<String> timeList = new ArrayList<>();
		if(date1.equals(date2)){
			System.out.println("两个日期相等!");
			return null;
		}

		String tmp;
		if(date1.compareTo(date2) > 0){  //确保 date1的日期不晚于date2
			tmp = date1; date1 = date2; date2 = tmp;
		}

		tmp = dateFormat.format(str2Date(date1).getTime());

		int num = 0;
		while(tmp.compareTo(date2) <= 0){
			System.out.println(tmp);
			timeList.add(tmp);
			num++;
			tmp = dateFormat.format(str2Date(tmp).getTime() + 3600*24*1000);
		}
		return timeList;
	}


/**
	 * 获取月份起始日期
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static String getMinMonthDate(String date) throws ParseException{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dateFormat.parse(date));
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
		return dateFormat.format(calendar.getTime());
	}

	/**
	 * 获取月份最后日期
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static String getMaxMonthDate(String date) throws ParseException{
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(dateFormat.parse(date));
		calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
		return dateFormat.format(calendar.getTime());
	}
/**
	 * 获取当天的开始时间
	 * @return
	 */
	public static Date getDayBegin() {
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 获取当天的结束时间
	 * @return
	 */
	public static Date getDayEnd() {
		Calendar cal = new GregorianCalendar();
		cal.set(Calendar.HOUR_OF_DAY, 23);
		cal.set(Calendar.MINUTE, 59);
		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值