java日期格式问题,求大神帮助(或许你没发现过的问题)

问题描述

发现问题的原因:之前数据生成NC文件,其中将日期转成long型,用于以后取时好比较和求差在做数据校验时,发现有部分日期和数据库里对不上,仔细检验后发现时将日期转成long再转回来时日期不对了。。。测试代码如下:leDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Calendarcalendar=Calendar.getInstance();Stringdate="1986-05-0400:00:00";//date="1989-04-1600:00:00";//date="1990-04-1500:00:00";//date="1991-04-1400:00:00";//date="1988-04-1000:00:00";//date="1987-04-1200:00:00";//date="1986-05-0400:00:00";try{calendar.setTime(sdf.parse(date));}catch(ParseExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}System.out.println(calendar.getTimeInMillis());System.out.println(sdf.format(newDate(calendar.getTimeInMillis())));以上的日期都不对出来后都是yyyy-MM-dd01:00:00而且long型的值也是和01时的一样1986-05-0400:01:00比1986-05-0401:00:00转成long型值还大求解决啊!

解决方案

解决方案二:
求帮助啊!
解决方案三:
肯定是用Calendar类时,时间格式不一样导致的,这样写就没问题packagecom.test;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassTest3{publicstaticvoidmain(String[]args){SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Stringdate1="1986-05-0400:00:00";Stringdate2="1986-05-0400:00:00";Stringdate3="1987-04-1200:00:00";Stringdate4="1988-04-1000:00:00";Stringdate5="1989-04-1600:00:00";Stringdate6="1990-04-1500:00:00";Stringdate7="1991-04-1400:00:00";Dated1=null;Dated2=null;Dated3=null;Dated4=null;Dated5=null;Dated6=null;Dated7=null;try{d1=sdf.parse(date1);d2=sdf.parse(date2);d3=sdf.parse(date3);d4=sdf.parse(date4);d5=sdf.parse(date5);d6=sdf.parse(date6);d7=sdf.parse(date7);}catch(ParseExceptione){e.printStackTrace();}System.out.println(d1.getTime());System.out.println(sdf.format(newDate(d1.getTime())));System.out.println(d2.getTime());System.out.println(sdf.format(newDate(d2.getTime())));System.out.println(d3.getTime());System.out.println(sdf.format(newDate(d3.getTime())));System.out.println(d4.getTime());System.out.println(sdf.format(newDate(d4.getTime())));System.out.println(d5.getTime());System.out.println(sdf.format(newDate(d5.getTime())));System.out.println(d6.getTime());System.out.println(sdf.format(newDate(d6.getTime())));System.out.println(d7.getTime());System.out.println(sdf.format(newDate(d7.getTime())));}}

解决方案四:
输出结果是5155200000001986-05-0401:00:005155200000001986-05-0401:00:005451552000001987-04-1201:00:005766048000001988-04-1001:00:006086592000001989-04-1601:00:006401088000001990-04-1501:00:006715584000001991-04-1401:00:00

解决方案五:
引用3楼a470577391的回复:

输出结果是5155200000001986-05-0401:00:005155200000001986-05-0401:00:005451552000001987-04-1201:00:005766048000001988-04-1001:00:006086592000001989-04-1601:00:006401088000001990-04-1501:00:006715584000001991-04-1401:00:00

额,看错了,怎么都多了1个小时。。。
解决方案六:
刚试了下,果然是多一小时而且只在00时和24时出错问题在这一步产生的sdf.parse(date)
解决方案七:
Calendar类子类的日历解释日期根据特定的日历系统规则。像其他的locale敏感类,日历提供了一个类的方法,getInstance,获得一般使用该类的默认实例。日历的getInstance方法返回一个日历的现场是基于系统设置的时间域已与当前的日期和时间初始化:日历现在getinstance()=日历。
解决方案八:
引用6楼AA5279AA的回复:

Calendar类子类的日历解释日期根据特定的日历系统规则。像其他的locale敏感类,日历提供了一个类的方法,getInstance,获得一般使用该类的默认实例。日历的getInstance方法返回一个日历的现场是基于系统设置的时间域已与当前的日期和时间初始化:日历现在getinstance()=日历。

出错是在sdf.parse(date),还没到Calendar,在parse时就已经将值改变了
解决方案九:
试了下Stringdate1="1986-05-0300:00:00";Stringdate2="1986-05-0400:00:00";Stringdate3="1986-05-0424:00:00";输出SatMay0300:00:00CST1986SunMay0401:00:00CDT1986MonMay0500:00:00CDT19863号TMD还是正常的,奇怪,顶下
解决方案十:
lz是不是把几个不正常的日期单独拿出来了,其余日期大多都是正常的
解决方案十一:
引用9楼wangjin9805的回复:

lz是不是把几个不正常的日期单独拿出来了,其余日期大多都是正常的

应该是跟闰秒这个东西有关的,但具体的关系还没搞清楚
解决方案十二:
引用9楼wangjin9805的回复:

lz是不是把几个不正常的日期单独拿出来了,其余日期大多都是正常的

没办法啊,正好碰到这个问题了!因为我们的很多数据都是实时存的,每个小时都有,近期把数据生成文件,在文件中用long存生成完之后现在要做数据对比(同数据库),因为是再把long转成date对比,所以出错了。。。幸亏是long转成date要不还真没发现!
解决方案十三:
今天发现这么比较,就小一个小时。。。无奈啊!SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Calendarcalendar=Calendar.getInstance();Stringdate="1986-05-0323:00:00";try{calendar.setTime(sdf.parse(date));}catch(ParseExceptione){e.printStackTrace();}SimpleDateFormatsdf3=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Calendarcalendar3=Calendar.getInstance();Stringdate3="1986-05-0423:00:00";try{calendar3.setTime(sdf3.parse(date3));}catch(ParseExceptione){e.printStackTrace();}longr=(calendar3.getTimeInMillis()-calendar.getTimeInMillis());System.out.println("值:"+r+"---"+(r/(60*60*1000)));
解决方案十四:
求大神解决啊!

时间: 2024-09-03 23:20:45

java日期格式问题,求大神帮助(或许你没发现过的问题)的相关文章

java报文解析!求大神指导!

问题描述 java报文解析!求大神指导! 大家帮我解析一下报文吧!我用的是UDP通信拿到数据,数据的类型是这样的S5W1449!p1r!p1r003B1s!S6WGGG00!p2r!p2r00003!p1r!p1r003B1s! 第0~2位为p1r或p2r,第3~6位为对应侧(p1r或p2r)的点位,第7位为状态位第8位为CRC校验位(将以上待发送的8位 异或)第9位为!结束位. 比如p1r!p1r003B1s!,我要拿到点位003B,要把它转化成十进制显示在我的界面画图!我要怎么解析报文!能写

关于java继承问题,求大神讲解

问题描述 关于java继承问题,求大神讲解 父类引用子类对象,父类变量可以使用子类的普通函数吗?为什么?? 解决方案 不能,因为对父类类型来说它只能访问自己有的方法,而子类类型却可以除了自己定义的方法,还有继承自父类的方法.这跟自然界的继承一样,子类有自己的特性,也有继承来的特性.而父类却只有自己的特性,不会有子类的特征. 解决方案二: 不可以的,子类继承父类后只能使用父类权限为public的方法或成员变量.父类不能调用子类的成员变量和方法.当子类继承父类后, 便继承了父类的某些特性,但父类却无

树形 递归-java 递归报错 求大神帮忙

问题描述 java 递归报错 求大神帮忙 private List<Post> getPostLower(List<Post> PostTops){ List<Post> postAll=new ArrayList<Post>(); // 上级 for(Post post:PostTops){ //查询到下级 List<Post> posts=basService.queryPostByParentId(post.getPostId()); //

关于java问题-Java循环结构初学者求大神带

问题描述 Java循环结构初学者求大神带 从键盘接收一批整数,比较其中最大值和最小值,输入数字0时循环结束. 解决方案 import java.util.Scanner;public class Test0305 { public static void main(String[] args) { Scanner s=new Scanner(System.in); int min=Integer.MAX_VALUE; int max=Integer.MIN_VALUE; int value=s.

移动-java swing问题,求大神知道,给点思路

问题描述 java swing问题,求大神知道,给点思路 做一个界面,一只黑点在界面上随机连续移动,并不断的漏出墨点在界面上,界面全黑后改成白点运行,漏出白点,如此循环 解决方案 http://zhidao.baidu.com/link?url=yllryC5z0z2Y0KgQscNOnxgHGwgFbTo2vz2BfLtcpaJvNv9Ok4HilvoyfxmsMwxSIo7YttFqJappO4MMm9vzq_

java的泛型集合求大神指教

问题描述 java的泛型集合求大神指教 animal ani=new animal("欧欧", "欧瑞娜"); animal ani2=new animal("丫丫", "拉布拉多"); animal ani3=new animal("菲菲", "拉布拉多"); animal ani4=new animal("美美", "欧瑞娜"); List l

oracle ibatis map-xml格式的报文如何插入数据库??求大神解答?难道没高手知道问题出在哪儿//???

问题描述 xml格式的报文如何插入数据库??求大神解答?难道没高手知道问题出在哪儿//??? 我将xml格式的一个请求报文赋值给一个变量,然后使用ibatis的map印射给一个字段,其他的字段都能插入进去,但是就这个报文字段插入不了,关键是sql没报错?求大神解答,这个报文在map之前能打印出来

遍历-Java字符串问题,求大神帮帮忙

问题描述 Java字符串问题,求大神帮帮忙 请用Java写这个程序,思考题: I am a student ! 定义一个方法: !student a am I 我有思路,但是我实现代码有困难,我的思路是:先将原字符串转换为字符数组,然后从头遍历,判断某个字符是否为空,一旦为空,将前面的存放到list集合中.然后继续从下一个开始遍历,然后判断是否为空,不为空继续向下遍历,然后继续遍历到为空的那个字符,然后继续将不为空的作为一个整体存入list集合中,往复循环进行,直至全部不为空的字符个数全部进入l

关于java 的split,求大神解决一下啊

问题描述 关于java 的split,求大神解决一下啊 代码 ",,,,".split(',') 我想得到Array('','','','') 但结果我却得到了Array() 有什么办法能得到我想要的结果呢... 解决方案 可以使用含有两个参数的split方法,如",,,,".split(",", -1),你调用的那个含有一个参数的方法默认实现如下: public String[] split(String regex) {return spli

stl转换ug的格式,求大神

问题描述 stl转换ug的格式,求大神 跪求stl转换ug的格式啊!!!@!@@UG格式没了要转换stl...求大神相助!!@! 解决方案 http://www.9sug.com/thread-4019-1-1.html