请问怎么把"yyyy-MM-dd HH:mm:ss"格式的字符串转换成纯数字的long类型。
ex: String s1 = "2009-12-02 10:17:51";
String s2 = "2009-11-02 22:22:22";s1的时间大于s2的时间,去掉“-”和空格转换成long类型来判断s1>s2。请问有什么好方法实现吗?
(由于小弟这方面的原因,不能用SimpleDateFormat类转换成Date后再判断)

解决方案 »

  1.   

    写个toLong的方法.
    用string的split方法, 首先用空格, 截成2009-12-02和10:17:51两部门
    日期部门用-截成2009, 12, 02三部门, 时间部门用:截成10, 17, 51三部门
    剩下的工作就是数学运算嘛
      

  2.   


    public class Main
    {
    public static Calendar getCalendar(String now)
    {
    int year = Integer.parseInt(now.substring(0, 4));
    int month = Integer.parseInt(now.substring(5, 7));
    int date = Integer.parseInt(now.substring(8, 10));
    int hour = Integer.parseInt(now.substring(11, 13));
    int minute = Integer.parseInt(now.substring(14, 16));
    int second = Integer.parseInt(now.substring(17, 19));

    Calendar c1 = Calendar.getInstance();
    c1.set(Calendar.YEAR, year);
    c1.set(Calendar.MONTH, month);
    c1.set(Calendar.DATE, date);
    c1.set(Calendar.HOUR, hour);
    c1.set(Calendar.MINUTE, minute);
    c1.set(Calendar.SECOND, second);

    return c1;
    }

    public static void main(String[] args)
    {
    String s1 = "2009-12-02 10:17:51"; 
    String s2 = "2009-11-02 22:22:22"; 

    if(getCalendar(s1).before(getCalendar(s2)))
    {
    System.out.println("s1 before s2");
    }
    else
    {
    System.out.println("s1 after s2");
    }
    }
    }
      

  3.   

    ^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) (?<hour>\d{2}):(?<minute>\d{2}):(?<second>\d{2})$这个正则就可以提取出来, 你使用group()获取的时候, 直接使用组名, 比如group("year")就可以获取到子串..如果你需要更严格的正则匹配, 可以参考我的博文: 一个涉及比较多的正则表达式
      

  4.   

    谢谢大家,4楼的大哥,不能转换成时间日期格式来进行比较呃,只是把"-",和空格去掉后成为Long型。来进行比较。
      

  5.   

    我还是用replaceAll()方法吧,即简单又省事效率还高!
      

  6.   

    public class Test
    {
    public static void  main(String[] args){ String s1 = "2009-12-02 10:17:51"; 
    String s2 = "2009-11-02 22:22:22"; 
        
        Long s1ToLong= new Long(s1.replaceAll("[^\\d]+",""));   //将非数字替换成空 Long s2ToLong= new Long(s2.replaceAll("[^\\d]+",""));   //将非数字替换成空 System.out.println(s1ToLong+" "+s2ToLong ); System.out.println(s1ToLong>s2ToLong );
    }
     }
      

  7.   

    ^(? <year>\d{4})-(? <month>\d{2})-(? <day>\d{2}) (? <hour>\d{2}):(? <minute>\d{2}):(? <second>\d{2})$
    不好意思, 我上面说的这个在java中行不通, 刚问老大, 说java中正则不支持命名组.., 
    用正则那我就只有这个办法了:Pattern p = Pattern.compile("^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})$");
    Matcher m1 = p.matcher("2009-11-02 22:22:22");
    Matcher m2 = p.matcher("2009-11-02 22:22:22");
    int[] time1 = new int[6];
    int[] time2 = new int[6];
    time1[0] = (int)m.group(1);
    time1[1] = (int)m.group(2);
    time1[2] = (int)m.group(3);
    time1[3] = (int)m.group(4);
    time1[4] = (int)m.group(5);
    time1[5] = (int)m.group(6);
    time2[0] = (int)m.group(1);
    time2[1] = (int)m.group(2);
    time2[2] = (int)m.group(3);
    time2[3] = (int)m.group(4);
    time2[4] = (int)m.group(5);
    time2[5] = (int)m.group(6);
    boolean isEquals = True;
    for(int i = 0; i < time1.length && isEquals; i++) {
      if(time1[i] != time2[i]) {
        System.out.println(time1[i]<time2[i]?"时间1小":"时间2小");
        isEquals = !isEquals;
      }
    }
    System.out.println("两个时间相等");