Android - 时间管理
2019-07-15 本文已影响0人
穿越平行宇宙
获取时间时需注意以下两点:
- 外国人把一月份整成了0,翻译成中国月份要加1
- 外国人把上周周日定为一周的开始,所以需要判断一下
一、获取当前时间并转换成相应的格式
1. 方式一:通过获取当前时间的毫秒值,定义指定的格式获取到当前时间
代码如下:
private static void getCurrentTime() {
// 得到long类型当前时间
long l = System.currentTimeMillis();
// new日期对象
Date date = new Date(l);
// 转换的日期输出格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nyr = dateFormat.format(date);
System.out.println("当前时间的毫秒值:"+l);
System.out.println("当前时间:"+date);
System.out.println(nyr);
// 注意:"yyyy-MM-dd HH:mm:ss"这个根式不是固定的根据你的需要自己的调整;
}
输出结果:
当前时间的毫秒值:1563071971800
当前时间:Sun Jul 14 10:39:31 CST 2019
2019-07-14 10:39:31
2. 方式二:通过获取到Calendar(日历)的实例化,获取到当前时间,并转换成相应的格式
代码如下:
private static void getCurrentTime() {
SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
System.out.println("现在时间:" + simdf.format(cal.getTime()));
}
输出结果:
Sun Jul 14 10:33:34 CST 2019
现在时间:2019-07-14 10:33:34
二、分别获取当前时间的 年、月、日 和 日期
1. 方式一:通过获取Calendar(日历)的实例化
代码如下:
private static void getCurrentTime() {
Calendar cal = Calendar.getInstance(Locale.CHINA);
int day = cal.get(Calendar.DATE);
int month = cal.get(Calendar.MONTH) + 1;
int year = cal.get(Calendar.YEAR);
int dow = cal.get(Calendar.DAY_OF_WEEK);
int dom = cal.get(Calendar.DAY_OF_MONTH);
int doy = cal.get(Calendar.DAY_OF_YEAR);
// 因为外国人把上周周日定为一周的开始,所以需要判断一下
if (dow > 1) {
dow -= 1;
} else {
dow = 7;
}
System.out.println("当前时间:" + cal.getTime());
System.out.println("年:" + year);
System.out.println("月:" + month);
System.out.println("日:" + day);
System.out.println("星期:" + dow);
System.out.println("当月的第几天:" + dom);
System.out.println("当年的第几天:" + doy);
}
输出结果:
当前时间:Sun Jul 14 11:19:13 CST 2019
年:2019
月:7
日:14
星期:7
当月的第几天:14
当年的第几天:195
2. 方式二:通过获取当前时间的毫秒值
代码如下:
private static void getCurrentTime() {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currTime = new Date();
int year = currTime.getYear();//年
int month = currTime.getMonth() + 1;//月
int day = currTime.getDate();//日
int week = currTime.getDay(); //星期几
if (week == 0) {
week = 7;
}
String curTime = formatter.format(currTime);
System.out.println("当前时间:" + curTime);
System.out.println("年:" + year);
System.out.println("月:" + month);
System.out.println("日:" + day);
System.out.println("星期:" + week);
}
输出结果:
当前时间:2019-07-14 11:55:19
年:119
月:7
日:14
星期:7
三、其它
1. 获取当前月的天数
代码如下:
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
int day = aCalendar.getActualMaximum(Calendar.DATE);
System.out.println("当前月的天数:" + day);
2. 获取当前的季度
代码如下:
Calendar CAL = Calendar.getInstance(Locale.CHINA);
int month = CAL.get(Calendar.MONTH) + 1;
String quarter = "";
if (month >= 1 && month <= 3) {
quarter = "1";
}
if (month >= 4 && month <= 6) {
quarter = "2";
}
if (month >= 7 && month <= 9) {
quarter = "3";
}
if (month >= 10 && month <= 12) {
quarter = "4";
}
System.out.println("当前季度为:" + quarter);
3. 获取当前时间戳
代码如下:
// 方法 一
System.currentTimeMillis();
// 方法 二
Calendar.getInstance().getTimeInMillis();
// 方法 三
new Date().getTime();
获取时间戳三种方法执行效率比较:
public class TimeTest {
private static long _TEN_THOUSAND=10000;
public static void main(String[] args) {
long times=1000*_TEN_THOUSAND;
long t1=System.currentTimeMillis();
testSystem(times);
long t2=System.currentTimeMillis();
System.out.println(t2-t1);
testCalander(times);
long t3=System.currentTimeMillis();
System.out.println(t3-t2);
testDate(times);
long t4=System.currentTimeMillis();
System.out.println(t4-t3);
}
public static void testSystem(long times){//use 188
for(int i=0;i<times;i++){
long currentTime=System.currentTimeMillis();
}
}
public static void testCalander(long times){//use 6299
for(int i=0;i<times;i++){
long currentTime=Calendar.getInstance().getTimeInMillis();
}
}
public static void testDate(long times){
for(int i=0;i<times;i++){
long currentTime=new Date().getTime();
}
}
}
结果如下:
Calendar.getInstance().getTimeInMillis() 这种方式速度最慢,这是因为Canlendar要处理时区问题会耗费较多的时间。
133
2372
137