Files
Android-WaterProject/app/src/main/java/com/ckkj/water/utils/CalendarUtils.java
fengjignqi 1b1575eb8a first
2026-05-16 16:19:39 +08:00

447 lines
11 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.ckkj.water.utils;
import android.annotation.SuppressLint;
import com.ckkj.water.utils.show.FL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* 日历工具类 Create by “AriaLyy@outlook.com” on 13-7-8.
*/
public class CalendarUtils {
/**
* 完整的日期时间格式
*/
public final static String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 只有日期的格式
*/
public final static String DATE_FORMAT = "yyyy-MM-dd";
/**
* 只有时间的格式
*/
public final static String TIME_FORMAT = "HH:mm:ss";
/**
* 带中文的日期格式(2000年01月01日)
*/
public final static String DATE_FORMAT_WITH_CHINESE = "yyyy年MM月dd日";
/**
* 短时间格式(HH:mm)
*/
public final static String SHORT_TIME_FORMAT = "HH:mm";
private static final String TAG = "CalendarUtils";
/**
* 星期天至星期六
*/
public final static String[] WEEKARRAY =
{ "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" };
/**
* 私有构造
*/
private CalendarUtils() {
}
/**
* 20:30
*/
public static String getShortTime() {
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(SHORT_TIME_FORMAT);
return sdf.format(c.getTime());
}
/**
* 获取当月的天数
*/
public static int getDayCount() {
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
aCalendar.set(Calendar.DATE, 1);//把日期设置为当月第一天
aCalendar.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
int sumDay = aCalendar.get(Calendar.DATE);
return sumDay;
}
/**
* 获取本月剩余天数
*/
public static int getRemainDay() {
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
int day = aCalendar.get(Calendar.DAY_OF_MONTH);
return CalendarUtils.getDayCount() - day + 1;
}
/**
* 把String类型的日期转换成Calendar对象
*
* @param string (日期时间:2000-00-00 00:00:00)
*/
public static Calendar transformStringToCalendar(String string) {
return transformStringToCalendar(string, DATE_TIME_FORMAT);
}
/**
* 通过SimpleDataFormat格式把string转换成Calendar
*
* @param string 日期字符串
* @param format 目标日期格式
*/
public static Calendar transformStringToCalendar(String string, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = null;
try {
date = sdf.parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
/**
* 把日期字符串转换成TimeMillis
*/
public static long transformStringToMillis(String string) {
return transformStringToCalendar(string).getTimeInMillis();
}
/**
* 通过TimeMillis转换成秒钟
*
* @param millis TimeMillis
*/
public static long getSecondWithTimeMillis(long millis) {
return millis / 1000;
}
/**
* 返回两个日期相差的秒
*/
public static long getIntervalInSeconds(Calendar calendar, Calendar targetCalendar) {
return (calendar.getTimeInMillis() - targetCalendar.getTimeInMillis()) / 1000;
}
/**
* 格式化日期
*
* @param string 有效的日期字符
* @param format 格式化的格式
*/
public static String formatWithString(String string, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(transformStringToCalendar(string).getTime());
}
/**
* 格式化日期
*
* @param src 源日期字符
* @param srcFormat 源日期格式
* @param targetFormat 目标日期格式
*/
public static String formatWithString(String src, String srcFormat, String targetFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(srcFormat);
try {
Date date = sdf.parse(src);
SimpleDateFormat targetSdf = new SimpleDateFormat(targetFormat);
return targetSdf.format(date);
} catch (Exception e) {
FL.e(TAG, "src=" + src + " " + srcFormat + " " + targetFormat);
e.printStackTrace();
}
return null;
}
/**
* 格式化成日期时间
*
* @param string 将要被格式化的日期字符串
* @return 格式:(2000-00-00 00:00:00)
*/
public static String formatDateTimeWithString(String string) {
return formatWithString(string, DATE_TIME_FORMAT);
}
/**
* 格式化日期
*
* @param srcDate 源日期字符
* @param srcDateFormat 源日期格式
* @param targetFormat 目标格式
*/
public static String formatDateTimeWithString(String srcDate, String srcDateFormat,
String targetFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(srcDateFormat);
try {
Date date = sdf.parse(srcDate);
SimpleDateFormat parseSdf = new SimpleDateFormat(targetFormat);
return parseSdf.format(date);
} catch (ParseException e) {
FL.e(TAG, "srcDate:"
+ srcDate
+ " srcDateFormat:"
+ srcDateFormat
+ " targetFormat"
+ targetFormat);
e.printStackTrace();
}
return null;
}
/**
* 字符转日期
*/
public static Date StringToDate(String time) {
@SuppressLint("SimpleDateFormat")
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
try {
return format.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
return new Date();
}
/**
* 日期转字符
*/
public static String DateToString(Date time) {
if (time==null){
return "";
}
@SuppressLint("SimpleDateFormat")
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
return format.format(time);
}
/**
* 格式化日期
*
* @param string 将要被格式化的日期字符串
* @return 格式:(2000-00-00)
*/
public static String formatDateWithString(String string) {
return formatWithString(string, DATE_FORMAT);
}
/**
* 格式化日期
*
* @param string 将要被格式化的日期字符串
* @return 格式:(00:00:00)
*/
public static String formatTimeWithString(String string) {
return formatWithString(string, TIME_FORMAT);
}
/**
* 格式化日期
*
* @param string 将要被格式化的日期字符串
* @return 格式:(2000年01月01日)
*/
public static String formatStringToChinese(String string) {
return formatWithString(string, DATE_FORMAT_WITH_CHINESE);
}
/**
* Data日期格式化成String
*
* @param date 将要被格式化的data
* @return 格式:(2000-00-00 00:00:00)
*/
public static String formatDateTimeWithDate(Date date) {
return formatStringWithDate(date, DATE_TIME_FORMAT);
}
/**
* 时间戳格式的数据格式化成需要的格式
*
* @param string 将要被格式化的时间戳
* @return 格式:(2000-00-00 00:00:00)
*/
public static String formatDateTimeWithTime(String string) {
return formatStringWithDate(timeToData(string), DATE_TIME_FORMAT);
}
/**
* 把中文日期2000年01月01日)格式化成标准日期(2000-01-01)
*
* @param data 将要格式化的日期字符串
* @return 格式:(2000-00-00);
*/
public static String formatChineseDataToData(String data) {
data = data.replace("", "-");
data = data.replace("", "-");
data = data.replace("", "");
return data;
}
/**
* 日期格式化成String
*
* @param date 将要格式化的日期字符串
* @return 格式format格式
*/
public static String formatStringWithDate(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 把String类型的时间转换成Calendar
*
* @param time 时间格式00:00:00
*/
public static Calendar transformStringTimeToCalendar(String time) {
Calendar calendar = Calendar.getInstance();
String[] split = time.split(":");
if (split.length > 0) {
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(split[0]));
}
if (split.length > 1) {
calendar.set(Calendar.MINUTE, Integer.parseInt(split[1]));
}
if (split.length > 2) {
calendar.set(Calendar.SECOND, Integer.parseInt(split[2]));
}
return calendar;
}
/**
* 把时间戳:1234567890123,转换成Date对象
*/
public static Date timeToData(String time) {
return new Date(Long.parseLong(time));
}
/**
* 比较两个字符串日期的大小
*
* @return 小于0srcData 小于 tagData;
* 等于0则srcData = tagData;
* 大于0则srcData 大余 tagData
*/
public static int compare(String srcDate, String tagDate) {
return srcDate.compareTo(tagDate);
}
/**
* 返回现在的日期和时间
*
* @return 格式:2000-00-00 00:00:00
*/
public static String getNowDataTime() {
Calendar calendar = Calendar.getInstance();
return formatDateTimeWithDate(calendar.getTime());
}
/**
* 返回当前的日期
*
* @return 格式2000-00-00
*/
public static String getData() {
return getNowDataTime().split(" ")[0];
}
/**
* 返回当前时间
*
* @return 格式00:00:00
*/
public static String getTime() {
return getNowDataTime().split(" ")[1];
}
/**
* 获取当前星期数
*/
public static String getWeekFromCalendar() {
String weekIndex = null;
Calendar c = Calendar.getInstance();
int week = c.get(Calendar.DAY_OF_WEEK);
switch (week) {
case 1:
weekIndex = "SUNDAY";
break;
case 2:
weekIndex = "MONDAY";
break;
case 3:
weekIndex = "TUESDAY";
break;
case 4:
weekIndex = "WEDNESDAY";
break;
case 5:
weekIndex = "THURSDAY";
break;
case 6:
weekIndex = "FRIDAY";
break;
case 7:
weekIndex = "SATURDAY";
break;
}
return weekIndex;
}
//根据秒数转化为时分秒 00:00:00
public static String getTime(int second) {
if (second < 10) {
return "00:0" + second;
}
if (second < 60) {
return "00:" + second;
}
if (second < 3600) {
int minute = second / 60;
second = second - minute * 60;
if (minute < 10) {
if (second < 10) {
return "0" + minute + ":0" + second;
}
return "0" + minute + ":" + second;
}
if (second < 10) {
return minute + ":0" + second;
}
return minute + ":" + second;
}
int hour = second / 3600;
int minute = (second - hour * 3600) / 60;
second = second - hour * 3600 - minute * 60;
if (hour < 10) {
if (minute < 10) {
if (second < 10) {
return "0" + hour + ":0" + minute + ":0" + second;
}
return "0" + hour + ":0" + minute + ":" + second;
}
if (second < 10) {
return "0" + hour + ":" + minute + ":0" + second;
}
return "0" + hour + ":" + minute + ":" + second;
}
if (minute < 10) {
if (second < 10) {
return hour + ":0" + minute + ":0" + second;
}
return hour + ":0" + minute + ":" + second;
}
if (second < 10) {
return hour + ":" + minute + ":0" + second;
}
return hour + ":" + minute + ":" + second;
}
}