Android 时间和时间戳

什么是时间戳

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据

什么是标准格式化时间

    比如现在的时间,北京时间2021年12月6号10点57分54秒,对应的标准格式化时间就是“Mon Dec 06 10:57:54 GMT+08:00 2021”

1
2
3
//  calendar.getTime()获取到的就是这一刻的标准格式化时间
Calendar calendar = Calendar.getInstance();
Log.d("标准格式化时间: ",calendar.getTime());

时间转换为时间戳

    注意下,Calendar的getTime()得到的是标准格式化时间,而在这里date已经是标准格式化时间,Date的getTime()得到的是一个时间戳

1
2
3
4
5
6
7
//    提交进来一个yyyy-MM-dd HH:mm:ss格式的参数
private String dateToStamp(String dateValue) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//输入时间格式
Date date = simpleDateFormat.parse(dateValue);//将传入的时间字符串根据时间格式转换为标准格式化时间
long timeStampValue = date.getTime();//得到时间戳
return String.valueOf(timeStampValue);
}

时间戳转换为时间

1
2
3
4
5
6
7
//    提交进来一个时间戳
private String stampToDate(long stampValue){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//输入时间格式
Date date = new Date(stampValue);//根据传入的时间戳得到标准格式化时间
String dateValue = simpleDateFormat.format(date);//从标准格式化时间中得到与时间格式对应的日期
return dateValue;
}

当前时间信息

    兜兜转转,无非是围绕着一个标准格式化时间转来转去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    private void dateShow() {
Calendar calendar = Calendar.getInstance();//日历类
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//时间格式

Date date = calendar.getTime();//当前的标准格式化时间
String dateValue = simpleDateFormat.format(date);//从当前标准格式化时间中得到与时间格式对应的时间
long dateStamp = date.getTime();//当前时间的时间戳
// Date类中的年月日时分秒获取方法已经废弃
int Year = calendar.get(Calendar.YEAR);//年
int Month = calendar.get(Calendar.MONTH);//月份(0-11)
int Day = calendar.get(Calendar.DAY_OF_MONTH);//日
int Hour = calendar.get(Calendar.HOUR_OF_DAY);//时(24小时格式)
int Minute = calendar.get(Calendar.MINUTE);//分
int Second = calendar.get(Calendar.SECOND);//秒

Log.d(TAG, "dateShow: 标准格式化时间: " + date);
Log.d(TAG, "dateShow: 时间格式对应时间: " + dateValue);
Log.d(TAG, "dateShow: 时间戳: " + dateStamp);
Log.d(TAG, "dateShow: " + Year + "年" + (Month + 1) + "月" + Day + "日" + Hour + "时" + Minute + "分" + Second + "秒");
}

    输出

1
2
3
4
D/MainActivity: dateShow: 标准格式化时间: Mon Dec 06 12:00:40 GMT+08:00 2021
D/MainActivity: dateShow: 时间格式对应时间: 2021-12-06 12:00:40
D/MainActivity: dateShow: 时间戳: 1638763240386
D/MainActivity: dateShow: 2021年12月6日12时0分40秒

从时间戳中截取日期

    怎么简单的获取时间戳中的年月日,不能转换为时间格式然后再用substring截取吧。。。

1
2
3
4
5
6
7
8
9
10
    private void stamp(long timeStamp) {
Calendar calendar = Calendar.getInstance();
// long timeStamp = calendar.getTimeInMillis();//这个方法可以获取时间戳,比Date.getTime()效率更高
calendar.setTimeInMillis(timeStamp);//给Calendar类重设时间戳
// 从设置的时间戳中获取年月日
int Year = calendar.get(Calendar.YEAR);
int Month = calendar.get(Calendar.MONTH);
int Day = calendar.get(Calendar.DAY_OF_MONTH);
Log.d(TAG, "stamp: " + Year + "年" + (Month + 1) + "月" + Day + "日");
}