audit_spider 2017-07-11 11:49 采纳率: 0%
浏览 3694

java 时间生成毫秒级的时间戳转换后,用这个生成的时间戳再转换为时间,为什么和原来的不一样

源程序如下:
public class TimeTool {
//2011/08/17 12:01:12.984851 1313554656851 1313554657851 1313583456851
public static void main(String[] args) {
TimeTool time=new TimeTool();
String timeStamp=null;
String date=null;
timeStamp = time.Date2Stamp("2011/08/17 12:01:13.984851");
System.out.println("原时间为="+timeStamp);
System.out.println("转换的时间戳为="+timeStamp);
date=time.Stamp2Date(timeStamp);
System.out.println("转换后的时间="+date);
}
public static String Date2Stamp(String date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SS");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CEST")); //设置时区
Date d = null;
try {
d = simpleDateFormat.parse(date);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long ts = d.getTime();
return String.valueOf(ts);
}
/**
* 将时间戳转换为日期
* @param stamp 时间戳
* @return 时间,返回格式为 yyyy-MM-dd-HH-mm-ss
*/
public static String Stamp2Date(String stamp){

    String res;
    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SS");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CEST")); //设置时区
    long lt=new Long(Long.parseLong(stamp));
    Date date=new Date(lt); 
    res=simpleDateFormat.format(date);
    return res;
}
}

输出结果:
原时间为=1313583457851
转换的时间戳为=1313583457851
转换后的时间=2011/08/17 12:17:37.851

  • 写回答

2条回答

  • shen931205 2017-07-12 01:52
    关注

    对于毫秒,SimpleDateFormat应该只能精确到毫秒三位,比如2011/08/17 12:01:13.984这个字符串是可以正常转换的
    但是2011/08/17 12:01:13.984851这个字符串的最后三位851是没办法正常转化的,至于为什么差了几分钟,个人猜测可能是
    SimpleDateFormat这个类使用了一些位运算导致的。
    说白了就是精度不够的问题

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!