首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个包含日期的字符串,以检查其中一个字符串在另一个字符串之前还是之后。

比较两个包含日期的字符串,以检查其中一个字符串在另一个字符串之前还是之后。
EN

Stack Overflow用户
提问于 2016-03-08 19:10:34
回答 2查看 88关注 0票数 0

我已经为一个客户端服务器应用程序编写了一些代码,它允许服务器为两个不同的项设置两个截止日期。这些项目有一个最后期限,在此期限内,服务器应在时间到达时显示。

以下是我到目前为止所拥有的:

代码语言:javascript
复制
String[] deadlines = new String[2];

Calendar deadline = Calendar.getInstance();

for(int i = 0; i < 2; i++)
{

    System.out.print("Enter finishing time for item " + (i+1) + " in 24-hr format "); // Item 1
    System.out.print("(e.g. 17:52) :  ");
    String timeString = input.nextLine(); // get input

    String hourString = timeString.substring(0,2);
    int hour = Integer.parseInt(hourString);

    String minString = timeString.substring(3,5);
    int minute = Integer.parseInt(minString);                   

    deadline.set(year,month,date,hour,minute,0);

    deadlines[i] = getDateTime(deadline);

    System.out.print("\nDeadline set for item " + (i+1) + "\n");
    System.out.println(getDateTime(deadline)+ "\n\n");
}

System.out.println("\nServer running...\n");


Calendar now = Calendar.getInstance();

System.out.print(deadlines[0]); // HERE
System.out.print(deadlines[1]); // AND HERE
// getDateTime(now) outputs the same as deadlines[0] + deadlines[1].


while(now.before(deadlines[0]) || now.before(deadlines[1])) // THIS LINE
{
    //System.out.println(getDateTime(now));

    try
    {
        Thread.sleep(2000);
    }
    catch (InterruptedException intEx)
    {

    }

    now = Calendar.getInstance();

    if (now.after(deadlines[0]))
        System.out.println("\n\nDeadline reached" + deadlines[0] + "\n");
    if (now.after(deadlines[1]))
        System.out.println("\n\nDeadline reached" + deadlines[1] + "\n");
}

public static String getDateTime(Calendar dateTime)
{
    //Extract hours and minutes, each with 2 digits
    //(i.e., with leading zeroes if needed)...

    String hour2Digits = String.format("%02d", dateTime.get(Calendar.HOUR_OF_DAY));
    String min2Digits = String.format("%02d", dateTime.get(Calendar.MINUTE));

    return(dateTime.get(Calendar.DATE) 
            + "/" + (dateTime.get(Calendar.MONTH)+1) 
            + "/" + dateTime.get(Calendar.YEAR) 
            + "  "+ hour2Digits + ":" + min2Digits);
}   

我需要检查now是否在deadlines[0]deadlines[1]的值之前。我该怎么做?一定有比把它转换成字符串更好的方法,等等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-08 19:38:27

您可以使用LocalTime#parse,它采用您希望用户输入的确切格式。

代码语言:javascript
复制
String input = "17:52";
LocalTime lt = LocalTime.parse(input); // 17:52

然后将其传递给带有LocalDateTime#ofLocalDate

代码语言:javascript
复制
LocalDateTime ldt = LocalDateTime.of(LocalDate.of(year, month, day), lt);

如果您需要比较它们,请使用compare()isAfter()isBefore()

代码语言:javascript
复制
while (LocalDateTime.now().isAfter(ldt)){
    // doStuff
}

编辑

如果希望在循环之外访问对象,请继续使用相同的数组逻辑(如果需要)。

代码语言:javascript
复制
LocalDateTime[] dateTimes = new LocalDateTime[2];

for (//){
    datesTimes[i] // for example
}
票数 1
EN

Stack Overflow用户

发布于 2016-03-08 19:29:54

代码语言:javascript
复制
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dateTime = f.parseDateTime("2012-01-10 23:13:26");

DateTime now = new Date();

if(now.compareTo(dateTime)<=0){
   // dateTime is in the past
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35875965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档