一些有关时间的小工具
知识储备
1.java.util.Date:时间类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GB0D6LQO-1660111797223)(
)]
构造方法
Date()
分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。
一点功能:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHj60Rt9-1660111797226)(assets/
)]
2.java.text.DateFormat:时间格式化类(抽象类),实现类:java.text.SimpleDateFormat
DateFormat是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间。
日期/时间格式化子类(如SimpleDateFormat
)允许格式化(即日期文本),解析(文本日期)和归一化。
该日期表示为一个Date
对象,或自1970年1月1日00:00:00 GMT以来的毫秒。
DateFormat
提供了许多类方法,用于根据默认或给定的区域设置和多个格式化样式获取默认的日期/时间格式化程序。 格式化风格包括FULL
, LONG
, MEDIUM
和SHORT
。 方法说明中提供了更多细节和使用这些样式的示例。
DateFormat
可帮助您格式化和解析任何区域设置的日期。 您的代码可以完全独立于几个月,几个星期甚至日历格式的区域设置约定:月球与太阳能。
要格式化当前区域设置的日期,请使用静态工厂方法之一:
myString = DateFormat.getDateInstance().format(myDate);
3.java.util.Calendar:日历类(抽象类),实现类:java.util.GergorianCalendar
-
所述
Calendar
类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields
如YEAR
,MONTH
,DAY_OF_MONTH
,HOUR
,等等,以及用于操纵该日历字段,如获取的日期下个星期。时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为
protected
。与其他区域设置敏感的类一样,
Calendar
提供了一种类方法getInstance
,用于获取此类型的一般有用的对象。Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已使用当前日期和时间进行初始化:Calendar rightNow = Calendar.getInstance();
Calendar
对象可以产生实现特定语言和日历风格的日期时间格式化所需的所有日历字段值(例如日语 - 公历,日语 - 繁体)。Calendar
定义某些日历字段返回的值的范围及其含义。 例如,日历系统第一个月的值为MONTH == JANUARY
为所有日历。 其他值由具体的子类定义,如ERA
。 有关详细信息,请参阅各个实体文档和子类文档。获取和设置日历字段值
可以通过调用
set
方法设置日历字段值。 在Calendar
设置的任何字段值将不被解释,直到它需要计算其时间值(从Epoch的毫秒)或日历字段的值。 调用get
,getTimeInMillis
,getTime
,add
和roll
涉及这样的计算。
时间的小工具
``
public class TimeHelper {
public static final String FORMAT_NOTIME = "yyyy-MM-dd";
public static SimpleDateFormat simpleDateFormat = new SimpleDateFormat(FORMAT_NOTIME);
public static long todayDate;
private static final String TAG = "TimeController";
/*----日期类----*/
// 得到当前日期戳(不带时间,只有日期)
public static long getCurrentDateStamp() {
Calendar cal = Calendar.getInstance();
int currentYear = cal.get(Calendar.YEAR);
int currentMonth = cal.get(Calendar.MONTH) + 1;
int currentDate = cal.get(Calendar.DATE);
long time = 0;
try {
time = simpleDateFormat.parse(currentYear + "-" + currentMonth + "-" + currentDate).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return time;
}
// 根据指定日期戳解析成日期形式(yyyy-MM-dd)
public static String getStringDate(long timeStamp) {
return simpleDateFormat.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
}
// 根据指定日期戳解析成日期形式(yyyy-MM-dd)
public static String getStringDateDetail(long timeStamp) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
}
// 得到当前日期的指定间隔后的日期
public static long getDateByDays(long time, int intervalDay) throws ParseException {
// 转换成Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
calendar.add(Calendar.DATE, intervalDay);
return calendar.getTimeInMillis();
}
// 返回两个日期之间相隔多少天
public static int daysInternal(long time1, long time2) throws ParseException {
Date date1 = simpleDateFormat.parse(getStringDate(time1));
Date date2 = simpleDateFormat.parse(getStringDate(time2));
int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
return days;
}
/*----时间类----*/
// 得到当前时间戳(有日期与时间)
public static long getCurrentTimeStamp() {
return System.currentTimeMillis();
}
// 判断两个时间戳是否为同一天
public static boolean isTheSameDay(long time1, long time2) {
return getStringDate(time1).equals(getStringDate(time2));
}
// 返回过去第几天的日期
public static String getPastDate(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("MM-dd");
String result = format.format(today);
return result;
}
// 返回过去第几天的日期(有年份)
public static String getPastDateWithYear(int past) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
Date today = calendar.getTime();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String result = format.format(today);
return result;
}
// 获取n天以后的日期
public static String getDayAgoOrAfterString(int num) {
Calendar calendar1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
calendar1.add(Calendar.DATE, num);
return sdf1.format(calendar1.getTime());
}
DateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
calendar1.add(Calendar.DATE, num);
return sdf1.format(calendar1.getTime());
}