0

我将此数据 19/12/2005 17:30:45 转换为 mileseconds 时遇到了一点问题。我不知道为什么,我翻译错误为Jun 28 17:30:45 CEST 1995 Time :804353445798

我使用的代码是这样的:

private static long ConvertTimeToTimeStamp(String time) {   

  Integer[] data = new Integer[6];
  String [] tokens = time.split(" "); 

  System.out.println(tokens[0]);
  System.out.println(tokens[1]);

  String[] d_m_y = tokens[0].split("/"); 
  String[] hh_mm_ss = tokens[1].split(":"); 

  for (int i = 0; i < d_m_y.length; i++) {
    data[i]=Integer.parseInt(d_m_y[i]); 
    // System.out.println(d_m_y[i]);        
  }

  for (int i = 0; i < hh_mm_ss.length; i++) {
    data[i+3]=Integer.parseInt(hh_mm_ss[i]); 
    //  System.out.println(hh_mm_ss[i]);    
  }
  //Calendar calendar =  Calendar.getInstance(); 
  GregorianCalendar calendar = new GregorianCalendar(); 
  calendar.set(data[0]+1970, data[1], data[2], data[3],data[4],data[5]);

  System.out.println(calendar.getTime().toString()); 
  return calendar.getTimeInMillis(); 
}
4

5 回答 5

6

您不应手动解析日期 - 请改用日期格式

String s = "19/12/2005 17:30:45";
Date d = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(s);
于 2012-11-30T12:09:25.223 回答
2

从一开始就将此对象视为日期。这样会可靠得多。

使用SimpleDateFormat.parse()将您的字符串解析为日期/时间。否则,您将被简化为字符串解析/拆分/重组等,没有边界检查、类型检查等。您的解决方案是字符串类型的,而不是类型的。

我参考了标准的 Java 库,但Joda-Time是在 Java 中进行日期工作的更好选择,我建议采用它以获得更直观和更安全的 API。

于 2012-11-30T12:08:43.593 回答
1

忘掉它。使用SimpleDataFormat带有模式的对象dd/MM/yyyy HH:mm:ssparse()字符串转换成日期对象。

于 2012-11-30T12:09:47.920 回答
1

尝试...

private static long ConvertTimeToTimeStamp(String time) { 
   //19/12/2005 17:30:45
   SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
   java.util.Date d = sdf.parse(time);
   return d.getTime();
}
于 2012-11-30T12:12:34.147 回答
0

您正在混合年、月和日的顺序。该set方法期望它们按以下顺序排列:年、月、日,并且您将它们提供为day + 1970, month, year话虽如此,您实际上可能对像joda-time这样的库更满意。

于 2012-11-30T12:09:00.633 回答