android里用Calendar取得的时间和手机显示的时间为何不一致?
android中,Calendar会默认使用格林威治时间,Date 及 java.text.SimpleDateFormat都会以与语言环境有关的方法来格式化和解析日期。
之前找了很多种方法都是IntelliJ IDEA 能用,而Android Studio不能用。
Android Studio 中 calendar设置时区无效的问题,改成下面这种形式便可解决。
在Android 8.0以前
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
Calendar calendar = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = formatter.format(calendar.getTime());
Log.d("testTime",time);
在Android 8.08.0以后设置时区,有所改动,不能直接设置 比如GMT+8:00这样的时区了,要设置 时区的id。
Calendar cal=Calendar.getInstance();//能获取当前的时间
//设置系统时区
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
return sdf.format(cal.getTime());
timezone 要设置为 比如 北京时间 为:Asia/Shanghai 这就是北京时间的时区id。
设置为北京时间的格式显示:
Calendar cal=Calendar.getInstance();//能获取当前的时间
//设置系统时区
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
return sdf.format(cal.getTime());