java字符串日期排序比较问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java字符串日期排序比较问题相关的知识,希望对你有一定的参考价值。

String s1="2012-4-4";
String s2="2013-3-3"
我想用split("-");,然后怎么比较;
第二个转为Date 怎么比较?

排序么?

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

public class Test 
    public static void main(String args[]) 

        System.out.println("字符串比较");
        test1();
        System.out.println("Date比较");
        test2();
    

    private static void test1() 
        List<String> data = init();

        System.out.println("排序前" + data);

        Collections.sort(data, new Comparator<String>() 

            public int compare(String o1, String o2) 

                String[] arr1 = o1.split("_");
                String[] arr2 = o2.split("_");

                int comparator = toInt(arr1[0], -1) - toInt(arr2[0], -2);

                if (comparator == 0) 
                    comparator = toInt(arr1[1], -1) - toInt(arr2[1], -2);
                    if (comparator == 0) 
                        return toInt(arr1[2], -1) - toInt(arr2[2], -2);
                    
                
                return comparator;
            
        );
        System.out.println("排序后" + data);
    

    private static void test2() 
        List<String> data = init();
        System.out.println("排序前" + data);

        final Format f = new SimpleDateFormat("yyyy-MM-dd");
        Collections.sort(data, new Comparator<String>() 

            public int compare(String o1, String o2) 

                Date d1;
                Date d2;
                try 
                    d1 = (Date) f.parseObject(o1);
                    d2 = (Date) f.parseObject(o2);
                    return d1.compareTo(d2);
                 catch (Exception e) 
                    e.printStackTrace();
                

                return 0;
            
        );
        System.out.println("排序后" + data);
    

    private static List<String> init() 

        List<String> data = new ArrayList<String>();
        data.add("2013-3-3");
        data.add("2012-4-4");
        return data;
    

    private static int toInt(String str, int delVal) 
        try 
            return Integer.parseInt(str);
         catch (Exception e) 
            return delVal;
        
    

字符串比较
排序前[2013-3-3, 2012-4-4]
排序后[2012-4-4, 2013-3-3]
Date比较
排序前[2013-3-3, 2012-4-4]
排序后[2012-4-4, 2013-3-3]

参考技术A 格式一样的自己比较字符串即可 参考技术B SimpleDateFormat 转成Date

Date.before(Date)
Date.after(Date)

import java.util.*;
import java.text.SimpleDateFormat;
import java.text.ParseException;
public class DateCompare
public static void main(String [] argv)throws ParseException
String s1="2012-4-4";
String s2="2013-3-3";
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-M-d");
Date d1=fmt.parse(s1);
Date d2=fmt.parse(s2);
if(d2.after(d1))
System.out.println(s2+">"+s1);
else
System.out.println(s2+"!>"+s1);


追问

用split呢?

追答

那样太费劲了,split 。

追问

嗯,但是我需要写在public int compare () 里面,这里需要一个返回值,如果谁大返回1,小的返回-1.而Date又要抛异常,我不会了

追答

异常应该继续抛出,让上层应用决定如何处理,因为上层传入的参数有问题,才会抛出异常的。

/**
dateStr2日期大于dateStr1,返回1;
相等返回0;
dateStr1日期大于dateStr2,返回-1;
*/

public static void main(String dateStr1, String dateStr2)throws ParseException
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-M-d");

Date d1=fmt.parse(dateStr1);
Date d2=fmt.parse(dateStr2);
return d2.compareTo(d1);

参考技术C package com.zz;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Demo4

/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
String s1 = "2012-4-4";
String s2 = "2013-3-3";
Demo4 demo4 = new Demo4();
int result = demo4.compare(s1, s2);
System.out.println(result);


public int compare(String s1, String s2)
boolean flag = false;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd",
Locale.CHINA);
try
Date d1 = simpleDateFormat.parse(s1);
Date d2 = simpleDateFormat.parse(s2);
if (d1.getTime() > d2.getTime())
flag = true;

catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();

if (flag)
return 1;
else
return -1;





ps:split就不要用了。这是在自虐。本回答被提问者和网友采纳

java 日期怎么比较大小?

java 日期怎么比较大小?

例子:

String beginTime=new String("2017-06-09 10:22:22");
String endTime=new String("2017-05-08 11:22:22"); 

    直接用Date自带方法before()和after()比较

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date sd1=df.parse(beginTime);
Date sd2=df.parse(endTime);

System.out.println(sd1.before(sd2));
System.out.println(sd1.after(sd2));

    用String的compareTo()方法:

Integer i=beginTime.compareTo(endTime);

System.out.println(i);

返回正值是代表左侧日期大于参数日期,反之亦然,日期格式必须一致

    转成date格式换成秒数比较秒数大小,getTime()方法

Date sd1=df.parse(beginTime);
Date sd2=df.parse(endTime);

long long1 =sd1.getTime()

long long2= sd2.getTime()

扩展资料:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

参考资料:java文档date类

参考技术A 把你的日期按照你的格式(yyyy/mm/dd、yyyy-mm-dd或者其他的格式)转换(前四位比较、中间两位进行比较、最后两位进行比较)为整型或者字符型进行比较。 参考技术B java.util.Date nowdate=new java.util.Date();
String myString = "2008-09-08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd", Locale.CHINA);
Date d = sdf.parse(myString);

boolean flag = d.before(nowdate);
if(flag)
System.out.print("早于今天")
else
System.out.print("晚于今天")本回答被提问者采纳
参考技术C java.util.Date 看随机文档
这类简单的事情不要问别人,否则你永远无法进步
参考技术D 比如说2011-1-1 ,2011-3-4 我认为最简单的方法是字符串截取比较

以上是关于java字符串日期排序比较问题的主要内容,如果未能解决你的问题,请参考以下文章

Mongo - Java - 将所有文档排序字符串日期作为日期

如何比较Java中的两个字符串日期?

Java日期字符串排序

java怎么比较两个日期(年和月)的大小

如何用java代码比较两个日期

java Java的:日期字符串格式大小比较