看了两个小时的API
java关于时间、日期的类真是混乱,真是烦
Calendar类设了时区还是没用,返回的还是当前系统时间。
后来一怒把那些类所有方法仔细研究一遍,找到一个比较好的方法。
贡献出来:
TimeZone类,
getTimeZone("GMT+08:00")获得北京时区
getDefault()获得默认时区
getRawOffset()方法,获得相对于GMT的偏移。
然后相减。
最后用Calendar 类获取1970年的毫秒数。再加上偏移。
就是正确的北京时间。
(因为有时候服务器在外国,直接getTime()获取的不是北京时间)
代码:
public final class Token {
private Token(){}
public static long getToken() {
TimeZone bjTzone = TimeZone.getTimeZone("GMT+08:00");
TimeZone dfTzone = TimeZone.getDefault();
long off = bjTzone.getRawOffset() - dfTzone.getRawOffset();
Calendar cr = Calendar.getInstance();
return cr.getTimeInMillis() + off;
}
//测试方法
public static void main(String[] args){
Timestamp now;
now = new Timestamp(getToken());
System.out.println(now);
}
}
然后存数据库的时候,
String sql = "xxxxx ?";
PreparedStatement stmt = conn.prepareStatement(sql);
Timestamp now = new Timestamp(Token.getToken()); stmt.setTimestamp(1, now);