我正在将十六进制字符串转换为日期格式...我的日期时间错误与以下内容有关...不确定我在哪里犯了错误。
String s1="07:db:0c:08:16:0d:1e:00"; //2011-12-8,22:13:30.0
s1 = s1.replaceAll(":", "");
String year = s1.substring(0, 4);
String month = s1.substring(4, 6);
String day = s1.substring(6, 8);
String hour = s1.substring(8, 10);
String minute = s1.substring(10, 12);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(year, 16));
cal.set(Calendar.MONTH, Integer.parseInt(month, 16));
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day, 16));
cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));
cal.set(Calendar.MINUTE, Integer.parseInt(minute, 16));
System.out.println(cal.getTime());
我的输出是'Mon Jan 09 10:13:49 CST 2012'..这是不正确的(应该是2011-12-8,22:13:30.0 - 格式现在被忽略)。
答案 0 :(得分:4)
Java中的月份由整数文字0..11表示,即1月为0,...,12月为11.在此代码中,Integer.parseInt(month, 16)
返回12,Calendar对象转换为1月明年(按年增加)。
CNC中
另外,在HOUR_OF_DAY
HOUR
而不是cal.set(Calendar.HOUR, Integer.parseInt(hour, 16));
答案 1 :(得分:2)
很少注意到:
你忘了秒:
String second = s1.substring(12, 14);
cal.set(Calendar.SECOND, Integer.parseInt(second, 16));