1.Math.ceil会导致精度缺失问题。
System.out.println(Math.ceil(1.000000000000000005));//结果是1
因为这个时候系统已经认为1.0000000000000000005等于1.0了。因此尽量不用ceil尽可能使用下面两种。
第一种:
int n=a/b;
if(a%b>0){
n++;
}
第二种:
return (a+b-1)/b;
2.日期类的使用
UTC世界标准时间,GMT格林尼治时间,含义不一样,但是看起来是一样的。
2.1Date类,常用方法
常用方法 | 含义 |
---|---|
Date(long time) | 构造方法 |
long getTime() | 获取毫秒数 |
voide setTime(long time) | 通过毫秒数设置时间 |
boolean after(Date date) | 比较日期先后 |
booleam before(Date date) | 同上 |
2.2SimpleDateFormat类
常用方法 | 含义 |
---|---|
SimpleDateFormat(String pattern) | 构造函数用的是默认时区,如果系统设置了时区,则用做默认时区,如果没设置,则用GMT作为默认时区 |
public SimpleDateFormat(String pattern, Locale locale) | 指定时区 |
Date parse(String time) | 将字符串表示的时间转成日期对象 |
String format(Date date) | 将日期对象转成字符串时间 |
void setTimeZone(…) | 设置时区 |
这是系统设置了时区是UTC+08:00
如果使用SimpleDateFormate(String pattern)则是GMT时区,会比北京时间晚8个小时
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("GMT"));//"GMT+08:00"
Date date = new Date(System.currentTimeMillis());
System.out.println(df.format(date));
System.out.println(df.getTimeZone().toString());
在项目中要设置时区,因为在不同的机器上,如果不设置时区,有一些机器可能为设置系统时区,那就会使用"GMT"作为默认时区。
设置时区的方法:
表示北京时间 (东八区) |
---|
SimpleDateFormat(yyyy-MM-dd HH:mm:ss, Locale.CHINA) |
df.setTimeZone(TimeZone.getTimeZone(“GMT”)) |
df.setTimeZone(TimeZone.getTimeZone(“GMT+08:00”)) |
df.setTimeZone(TimeZone.getTimeZone(“Asia/Shanghai”)) |
2.3Calendar类
常用方法
Calendar.getinstance() | 返回一个Clendar实例 |
setTime(Date) | 设置日期对象 |
getTime(Date) | 获取日期对象 |
int get(int field(eg.Callendar.YEAR,Calendar.MONTH等)) | 获取对应的数字,如一月返回0,二月返回1 |
void set(int filed,int value) | 设置对应域的值,如设置年,设置月 |
void set(int year,int month,int day | 设置年月日 |
void clear() | 所有字段都会被设置为未设过,内部的long time会变会0,回到1970 |