- 获取 当前年、半年、季度、月、日、小时 开始结束时间
- 时间处理工具类
1、DateUtil.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtil {
private static final String DATE_PATTERN_1 = "yyyy-MM-dd HH:mm:ss";
private static final String DATE_PATTERN_2 = "yyyy-MM-dd";
private static final String DATE_PATTERN_3 = "yyyyMMddHHmmss";
private static final String DATE_PATTERN_4 = "yyyyMMddHHmmssSSS";
private static final String DATE_PATTERN_5 = "HH:mm:ss";
private static final String DATE_PATTERN_6 = "yyyy/MM/dd";
public static Date getSeasonEndDate (Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, (month + 3) / 3 * 3);
calendar.set(Calendar.DATE, 1);
return new Date(calendar.getTime().getTime() - 24 * 60 * 60 *1000);
}
public static Date getSeasonStartDate (Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month / 3 * 3);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
public static long getThisMonthFirstDay() {
Calendar cale = Calendar.getInstance();
cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
return cale.getTimeInMillis();
}
public static long getThisMonthLastDay() {
Calendar cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 1);
cale.set(Calendar.DAY_OF_MONTH, 0);
return cale.getTimeInMillis();
}
public static long getTisWeekFirstDay() {
Calendar cal = Calendar.getInstance();
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);
int day = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTimeInMillis();
}
public static long getTisWeekLastDay() {
Calendar cal = Calendar.getInstance();
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
cal.setFirstDayOfWeek(Calendar.MONDAY);
int day = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
cal.add(Calendar.DATE, 6);
return cal.getTimeInMillis();
}
public static long getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
return calendar.getTimeInMillis();
}
public static long getCurrentDay() {
Calendar calendar = Calendar.getInstance();
return calendar.getTimeInMillis();
}
public static String getCurrentDayStr() {
return getFormatDateTime(getCurrentDay(), DATE_PATTERN_3);
}
public static String formatDateString(String strTime) {
SimpleDateFormat oldFormat;
if (strTime != null && strTime.length() == 17) {
oldFormat = new SimpleDateFormat(DATE_PATTERN_4, Locale.CHINA);
} else {
oldFormat = new SimpleDateFormat(DATE_PATTERN_3, Locale.CHINA);
}
SimpleDateFormat newFormat = new SimpleDateFormat(DATE_PATTERN_1, Locale.CHINA);
try {
Date date = oldFormat.parse(strTime);
return newFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
public static String getFormatDate(String strTime) {
SimpleDateFormat oldFormat;
if (strTime != null && strTime.length() == 17) {
oldFormat = new SimpleDateFormat(DATE_PATTERN_4, Locale.CHINA);
} else {
oldFormat = new SimpleDateFormat(DATE_PATTERN_3, Locale.CHINA);
}
SimpleDateFormat newFormat = new SimpleDateFormat(DATE_PATTERN_2, Locale.CHINA);
try {
Date date = oldFormat.parse(strTime);
return newFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
public static String getFormatDateTime(long dateTime, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Date date = new Date(dateTime);
return simpleDateFormat.format(date);
}
public static String getFormatDate(Date date) {
if (date == null) {
return "";
}
SimpleDateFormat format = new SimpleDateFormat(DATE_PATTERN_2);
return format.format(date);
}
public static String getFormatTime(String strTime) {
SimpleDateFormat oldFormat;
if (strTime != null && strTime.length() == 17) {
oldFormat = new SimpleDateFormat(DATE_PATTERN_4, Locale.CHINA);
} else {
oldFormat = new SimpleDateFormat(DATE_PATTERN_3, Locale.CHINA);
}
SimpleDateFormat newFormat = new SimpleDateFormat(DATE_PATTERN_5, Locale.CHINA);
try {
Date date = oldFormat.parse(strTime);
return newFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}
public static long String2Long(String dateStr) {
return String2Long(dateStr, DATE_PATTERN_3);
}
public static long String2Long(String dateStr, String dateFormat) {
SimpleDateFormat format = new SimpleDateFormat(dateFormat, Locale.CHINA);
Date date = null;
try {
date = format.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
if (date != null) {
return date.getTime();
} else {
return 0;
}
}
public static String Long2String(long dateLong) {
return Long2String(dateLong, DATE_PATTERN_2);
}
public static String Long3String(long dateLong) {
return Long2String(dateLong, DATE_PATTERN_6);
}
public static String Long2String1(long dateLong) {
return Long2String(dateLong, DATE_PATTERN_1);
}
public static String Long2String(long dateLong, String dateFormat) {
Date date = new Date(dateLong);
SimpleDateFormat format = new SimpleDateFormat(dateFormat, Locale.CHINA);
return format.format(date);
}
}
2、DateTimeUtil.java (荐)
import android.annotation.SuppressLint;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@SuppressLint("SimpleDateFormat")
public class TimeUtil {
private final static SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
private final static SimpleDateFormat longHourSdf = new SimpleDateFormat("yyyy-MM-dd HH");
private final static SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static Date getCurrentWeekDayStartTime() {
Calendar c = Calendar.getInstance();
try {
int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
c.add(Calendar.DATE, -weekday);
c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00"));
} catch (Exception e) {
e.printStackTrace();
}
return c.getTime();
}
public static Date getCurrentWeekDayEndTime() {
Calendar c = Calendar.getInstance();
try {
int weekday = c.get(Calendar.DAY_OF_WEEK);
c.add(Calendar.DATE, 8 - weekday);
c.setTime(longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59"));
} catch (Exception e) {
e.printStackTrace();
}
return c.getTime();
}
public static Date getCurrentDayStartTime() {
Date now = new Date();
try {
now = shortSdf.parse(shortSdf.format(now));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentDayEndTime() {
Date now = new Date();
try {
now = longSdf.parse(shortSdf.format(now) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentHourStartTime() {
Date now = new Date();
try {
now = longHourSdf.parse(longHourSdf.format(now));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentHourEndTime() {
Date now = new Date();
try {
now = longSdf.parse(longHourSdf.format(now) + ":59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentMonthStartTime() {
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.DATE, 1);
now = shortSdf.parse(shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentMonthEndTime() {
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.DATE, 1);
c.add(Calendar.MONTH, 1);
c.add(Calendar.DATE, -1);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentYearStartTime() {
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
now = shortSdf.parse(shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentYearEndTime() {
Calendar c = Calendar.getInstance();
Date now = null;
try {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentQuarterStartTime() {
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3)
c.set(Calendar.MONTH, 0);
else if (currentMonth >= 4 && currentMonth <= 6)
c.set(Calendar.MONTH, 3);
else if (currentMonth >= 7 && currentMonth <= 9)
c.set(Calendar.MONTH, 4);
else if (currentMonth >= 10 && currentMonth <= 12)
c.set(Calendar.MONTH, 9);
c.set(Calendar.DATE, 1);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getCurrentQuarterEndTime() {
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 2);
c.set(Calendar.DATE, 31);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 8);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getHalfYearStartTime() {
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 6) {
c.set(Calendar.MONTH, 0);
} else if (currentMonth >= 7 && currentMonth <= 12) {
c.set(Calendar.MONTH, 6);
}
c.set(Calendar.DATE, 1);
now = longSdf.parse(shortSdf.format(c.getTime()) + " 00:00:00");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
public static Date getHalfYearEndTime() {
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
}
3、DatetimeUtil.kt (荐)
import android.content.Context
import android.os.Build.VERSION.SDK_INT
import java.text.ParseException
import java.text.ParsePosition
import java.text.SimpleDateFormat
import java.util.*
import java.util.regex.Pattern
object DatetimeUtil {
@JvmField
val FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"
@JvmField
val FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE = "yyyy-MM-dd HH:mm"
@JvmField
val FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd"
@JvmField
val FORMAT_MONTH_DAY = "MM-dd"
@JvmField
val FORMAT_HOUR_MINUTE_SECOND = "HH:mm:ss"
@JvmField
val FORMAT_HOUR_MINUTE = "HH:mm"
@JvmField
val SUB_YEAR = if (SDK_INT < 24) Calendar.YEAR else android.icu.util.Calendar.YEAR
@JvmField
val SUB_MONTH = if (SDK_INT < 24) Calendar.MONTH else android.icu.util.Calendar.MONTH
@JvmField
val SUB_DAY = if (SDK_INT < 24) Calendar.DATE else android.icu.util.Calendar.DATE
@JvmField
val SUB_HOUR = if (SDK_INT < 24) Calendar.HOUR else android.icu.util.Calendar.HOUR
@JvmField
val SUB_MINUTE = if (SDK_INT < 24) Calendar.MINUTE else android.icu.util.Calendar.MINUTE
@JvmField
val SUB_SECOND = if (SDK_INT < 24) Calendar.SECOND else android.icu.util.Calendar.SECOND
@JvmField
val dayNames = arrayOf("", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
@JvmStatic
private val mTimeFormat = if (SDK_INT < 24)
java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
else
android.icu.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
@JvmStatic
fun stringToDate(dateStr: String, format: String): Date? {
return try {
if (SDK_INT < 24) {
val formatter = java.text.SimpleDateFormat(format, Locale.getDefault())
formatter.calendar.isLenient = false
formatter.parse(dateStr)
} else {
val formatter = android.icu.text.SimpleDateFormat(format, Locale.getDefault())
formatter.isLenient = false
formatter.parse(dateStr)
}
} catch (e: Exception) {
null
}
}
@JvmStatic
fun stringToDate(dateStr: String, format: String, pos: ParsePosition): Date? {
return if (SDK_INT < 24) {
val formatter = java.text.SimpleDateFormat(format, Locale.getDefault())
formatter.calendar.isLenient = false
formatter.parse(dateStr, pos)
} else {
val formatter = android.icu.text.SimpleDateFormat(format)
formatter.isLenient = false
formatter.parse(dateStr, pos)
}
}
@JvmStatic
fun dateToString(date: Date, format: String): String {
var result = ""
val formatter = if (SDK_INT < 24)
java.text.SimpleDateFormat(format, Locale.getDefault())
else
android.icu.text.SimpleDateFormat(format)
try {
result = formatter.format(date)
} catch (e: Exception) {
}
return result
}
@JvmStatic
fun getCurrDate(format: String): String {
return dateToString(Date(), format)
}
@JvmStatic
fun dateSub(dateKind: Int, dateStr: String, amount: Int): String {
val date = stringToDate(dateStr, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
return if (SDK_INT < 24) {
val calendar = Calendar.getInstance()
calendar.time = date
calendar.add(dateKind, amount)
dateToString(calendar.time, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
} else {
val calendar = android.icu.util.Calendar.getInstance()
calendar.time = date
calendar.add(dateKind, amount)
dateToString(calendar.time, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
}
}
@JvmStatic
fun timeSubtraction(firstTime: String, secTime: String): Long {
val first = stringToDate(firstTime, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)!!.time
val second = stringToDate(secTime, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)!!.time
return (second - first) / 1000
}
@JvmStatic
fun getDaysOfMonth(year: String, month: String): Int {
var days = 0
if (month == "1" || month == "3" || month == "5"
|| month == "7" || month == "8" || month == "10"
|| month == "12") {
days = 31
} else if (month == "4" || month == "6" || month == "9"
|| month == "11") {
days = 30
} else {
if (Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0 || Integer.parseInt(year) % 400 == 0) {
days = 29
} else {
days = 28
}
}
return days
}
@JvmStatic
fun getDaysOfMonth(year: Int, month: Int): Int {
val calendar = Calendar.getInstance()
calendar.set(year, month - 1, 1)
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
}
@JvmStatic
fun getToday(): Int {
val calendar = Calendar.getInstance()
return calendar.get(Calendar.DATE)
}
@JvmStatic
fun getMonth(): Int {
val calendar = Calendar.getInstance()
return calendar.get(Calendar.MONTH) + 1
}
@JvmStatic
fun getYear(): Int {
val calendar = Calendar.getInstance()
return calendar.get(Calendar.YEAR)
}
@JvmStatic
fun getDay(date: Date): Int {
val calendar = Calendar.getInstance()
calendar.time = date
return calendar.get(Calendar.DATE)
}
@JvmStatic
fun getYear(date: Date?): Int {
val calendar = Calendar.getInstance()
calendar.time = date
return calendar.get(Calendar.YEAR)
}
@JvmStatic
fun getMonth(date: Date): Int {
val calendar = Calendar.getInstance()
calendar.time = date
return calendar.get(Calendar.MONTH) + 1
}
@JvmStatic
fun dayDiff(date1: Date, date2: Date): Long {
return (date2.time - date1.time) / 86400000
}
@JvmStatic
fun yearDiff(before: String, after: String): Int {
val beforeDay = stringToDate(before, FORMAT_YEAR_MONTH_DAY)
val afterDay = stringToDate(after, FORMAT_YEAR_MONTH_DAY)
return getYear(afterDay) - getYear(beforeDay)
}
@JvmStatic
fun yearDiffCurr(after: String): Int {
val beforeDay = Date()
val afterDay = stringToDate(after, FORMAT_YEAR_MONTH_DAY)
return getYear(beforeDay) - getYear(afterDay)
}
@JvmStatic
fun dayDiffCurr(before: String): Long? {
val currDate = stringToDate(currDay(), FORMAT_YEAR_MONTH_DAY)
val beforeDate = stringToDate(before, FORMAT_YEAR_MONTH_DAY)
return currDate?.time?.minus(beforeDate!!.time)?.div(86400000)
}
@JvmStatic
fun getFirstWeekdayOfMonth(year: Int, month: Int): Int {
val c = Calendar.getInstance()
c.firstDayOfWeek = Calendar.SUNDAY
c.set(year, month - 1, 1)
return c.get(Calendar.DAY_OF_WEEK)
}
@JvmStatic
fun getLastWeekdayOfMonth(year: Int, month: Int): Int {
val c = Calendar.getInstance()
c.firstDayOfWeek = Calendar.SATURDAY
c.set(year, month - 1, getDaysOfMonth(year, month))
return c.get(Calendar.DAY_OF_WEEK)
}
@JvmStatic
fun getCurrent(): String {
val cal = Calendar.getInstance()
cal.time = Date()
val year = cal.get(Calendar.YEAR)
val month = cal.get(Calendar.MONTH) + 1
val day = cal.get(Calendar.DAY_OF_MONTH)
val hour = cal.get(Calendar.HOUR_OF_DAY)
val minute = cal.get(Calendar.MINUTE)
val second = cal.get(Calendar.SECOND)
val sb = StringBuffer()
sb.append(year).append("_").append(addzero(month, 2))
.append("_").append(addzero(day, 2)).append("_")
.append(addzero(hour, 2)).append("_").append(
addzero(minute, 2)).append("_").append(
addzero(second, 2))
return sb.toString()
}
@JvmStatic
fun getNow(): String {
val today = Calendar.getInstance()
return dateToString(today.time, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
}
@JvmStatic
fun isDate(date: String): Boolean {
val reg = StringBuffer(
"^((\\d{2}(([02468][048])|([13579][26]))-?((((0?")
reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))")
reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|")
reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12")
reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))")
reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))")
reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[")
reg.append("1-9])|(1[0-9])|(2[0-8]))))))")
val p = Pattern.compile(reg.toString())
return p.matcher(date).matches()
}
@JvmStatic
fun nextMonth(date: Date?, months: Int): Date {
val cal = Calendar.getInstance()
if (date != null) {
cal.time = date
}
cal.add(Calendar.MONTH, months)
return cal.time
}
@JvmStatic
fun nextDay(date: Date?, day: Int): Date {
val cal = Calendar.getInstance()
if (date != null) {
cal.time = date
}
cal.add(Calendar.DAY_OF_YEAR, day)
return cal.time
}
@JvmStatic
fun nextDay(day: Int, format: String): String {
val cal = Calendar.getInstance()
cal.time = Date()
cal.add(Calendar.DAY_OF_YEAR, day)
return dateToString(cal.time, format)
}
@JvmStatic
fun nextWeek(date: Date?, week: Int): Date {
val cal = Calendar.getInstance()
if (date != null) {
cal.time = date
}
cal.add(Calendar.WEEK_OF_MONTH, week)
return cal.time
}
@JvmStatic
fun currDay(): String {
return dateToString(Date(), FORMAT_YEAR_MONTH_DAY)
}
@JvmStatic
fun yesterday(): String {
return yesterday(FORMAT_YEAR_MONTH_DAY)
}
@JvmStatic
fun yesterday(format: String): String {
return dateToString(nextDay(Date(), -1), format)
}
@JvmStatic
fun tomorrow(): String {
return dateToString(nextDay(Date(), 1), FORMAT_YEAR_MONTH_DAY)
}
@JvmStatic
fun getDayNum(): Int {
var daynum = 0
val gd = GregorianCalendar()
val dt = gd.time
val gd1 = GregorianCalendar(1900, 1, 1)
val dt1 = gd1.time
daynum = ((dt.time - dt1.time) / (24 * 60 * 60 * 1000)).toInt()
return daynum
}
@JvmStatic
fun getDateByNum(day: Int): Date {
val gd = GregorianCalendar(1900, 1, 1)
var date = gd.time
date = nextDay(date, day)
return date
}
@JvmStatic
fun getYmdDateCN(datestr: String?): String {
if (datestr == null)
return ""
if (datestr.length < 10)
return ""
val buf = StringBuffer()
buf.append(datestr.substring(0, 4)).append(datestr.substring(5, 7))
.append(datestr.substring(8, 10))
return buf.toString()
}
@JvmStatic
fun getFirstDayOfMonth(format: String): String {
val cal = Calendar.getInstance()
cal.set(Calendar.DATE, 1)
return dateToString(cal.time, format)
}
@JvmStatic
fun getLastDayOfMonth(format: String): String {
val cal = Calendar.getInstance()
cal.set(Calendar.DATE, 1)
cal.add(Calendar.MONTH, 1)
cal.add(Calendar.DATE, -1)
return dateToString(cal.time, format)
}
@JvmStatic
fun addzero(sourceDate: Int, formatLength: Int): String {
return String.format("%0" + formatLength + "d", sourceDate)
}
@JvmStatic
fun getWeek(): String {
val cal = Calendar.getInstance()
return dayNames[cal.get(Calendar.DAY_OF_WEEK)]
}
@JvmStatic
fun getCurrentTimeBy12_24(context: Context): String {
if (android.text.format.DateFormat.is24HourFormat(context)) {
return getCurrDate(FORMAT_HOUR_MINUTE)
} else {
val sb = StringBuilder()
val hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY)
val minute = Calendar.getInstance().get(Calendar.MINUTE)
if (hour >= 12) {
sb.append(hour - 12).append(":").append(minute).append(" PM")
} else {
sb.append(hour).append(":").append(minute).append(" AM")
}
return sb.toString()
}
}
@JvmStatic
fun formatDateString(strTime: String): String {
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
try {
val date = formatter.parse(strTime)
return formatter.format(date)
} catch (e: ParseException) {
e.printStackTrace()
}
return ""
}
@JvmStatic
fun dateToLongStr(date: java.util.Date?): String? {
if (date == null) {
return null
}
val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
return formatter.format(date)
}
@JvmStatic
fun dateToDayStr(date: java.util.Date?): String? {
if (date == null) {
return null
}
val formatter = SimpleDateFormat("yyyy-MM-dd")
return formatter.format(date)
}
@JvmStatic
fun strToDate(strDate: String): Date? {
var formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
val pos = ParsePosition(0)
var strtodate: Date? = formatter.parse(strDate, pos)
if (strtodate == null) {
formatter = SimpleDateFormat("yyyy-MM-dd")
strtodate = formatter.parse(strDate, pos)
}
return strtodate
}
@JvmStatic
fun timestampToLongDateStr(value: Long?): String? {
val date = if (value == null) null else Date(value)
return dateToLongStr(date)
}
@JvmStatic
fun timestampToDateStr(value: Long?): String? {
val date = if (value == null) null else Date(value)
return dateToDayStr(date)
}
@JvmStatic
fun dateStrToTimestamp(strDate: String): Long? {
val date = strToDate(strDate)
return if (date == null) null else date!!.getTime()
}
}
4、获取时间范围
测试代码:
// LegoLog.d(getDateRange(1).toStr())
// LegoLog.d(getDateRange(2).toStr())
// LegoLog.d(getDateRange(3).toStr())
// LegoLog.d(getDateRange(4).toStr())
// LegoLog.d(getDateRange(5).toStr())
/**
* 获取日期范围
* 需求:本周、本月、本季都不包含当天;如果范围内的开始时间等于或大于当天,则范围为空;
* @param type Int 1:今日,2:本周,3:本月,4:本季
* @return Array<String>
*/
fun getDateRange(type: Int): Array<String> {
val currentDayStart = TimeUtil.getCurrentDayStartTime()//今日开始时间
var startDate: Date? = null//开始时间
var endDateStr = ""//结束时间
when (type) {
1 -> {
//今日
startDate = currentDayStart
endDateStr = DatetimeUtil.dateToLongStr(TimeUtil.getCurrentDayEndTime())!!//今日结束时间
}
2 -> {
//本周
startDate = TimeUtil.getCurrentWeekDayStartTime()
if (currentDayStart <= startDate) {
LegoLog.d("本周(不含当天)")
} else {
endDateStr = DatetimeUtil.yesterday() + " 23:59:59"//昨天结束
}
}
3 -> {
//本月
startDate = TimeUtil.getCurrentMonthStartTime()
if (currentDayStart <= startDate) {
LegoLog.d("本月(不含当天)")
} else {
endDateStr = DatetimeUtil.yesterday() + " 23:59:59"//昨天结束
}
}
4 -> {
//本季
startDate = TimeUtil.getCurrentQuarterStartTime()
if (currentDayStart <= startDate) {
LegoLog.d("本季(不含当天)")
} else {
endDateStr = DatetimeUtil.yesterday() + " 23:59:59"//昨天结束
}
}
}
return if (startDate != null && endDateStr.isNotEmpty()) {
arrayOf(
DatetimeUtil.dateToLongStr(startDate)!!,
endDateStr
)
} else {
arrayOf()
}
}
private fun Array<String>.toStr(): String {
val stringBuilder = StringBuilder()
for (element in this) {
println(element)
stringBuilder.append("==>$element")
}
if (stringBuilder.toString().isNotEmpty()) {
return stringBuilder.toString().substring(3)
}
return stringBuilder.toString()
}