前几天遇到一个日期格式的小坑,记录分享一下
程序需要判断当天是星期几,好执行某些操作,于是用到了下面的方法
SimpleDateFormat sdf = new SimpleDateFormat("EEE");
String week = sdf.format(new Date());
if ("星期五".equals(week)) {
System.out.println(week);
//操作
}
在自己电脑上正常运行,可是放服务器上就不行了,一直不进判断语句,整了大半天,没找到原因就换成下面的写法
Calendar c = Calendar.getInstance();
c.setTime(new Date());
int week = c.get(Calendar.DAY_OF_WEEK) - 1;
//week不减一,星期天~星期六对应1~7
//星期一~星期六对应1~6,星期天对应0
if (week == 5) {
System.out.println(week);
//操作
}
问题解决了,但是还是对SimpleDateFormat的格式产生了疑问,于是查了一下API
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
原来是服务器语言环境的问题
SimpleDateFormat sdf = new SimpleDateFormat("EEE",Locale.CHINA);
String week = sdf.format(new Date());
if ("星期五".equals(week)) {
System.out.println(week);
//操作
}
OK,服务器上运行正常
SimpleDateFormat sdf0 = new SimpleDateFormat("EEE");
SimpleDateFormat sdf1 = new SimpleDateFormat("EEEE");
SimpleDateFormat sdf2 = new SimpleDateFormat("EEE",Locale.ENGLISH);
SimpleDateFormat sdf3 = new SimpleDateFormat("EEEE",Locale.ENGLISH);
Date date = new Date();
System.out.println("中文环境sdf0:"+sdf0.format(date));
System.out.println("中文环境sdf1:"+sdf1.format(date));
System.out.println("英文环境sdf2:"+sdf2.format(date));
System.out.println("英文环境sdf3:"+sdf3.format(date));
运行结果,三个E以上,英语就会显示星期的全称,以下就是缩写