首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.date格式转换

java.util.date格式转换
EN

Stack Overflow用户
提问于 2014-02-27 05:22:54
回答 4查看 301关注 0票数 0

这里的问题是,我有以下代码:

代码语言:javascript
复制
String newPattern = "yyyy-MM-dd HH:mm:ss.SSS";
SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

String nDate1 = rs.getString("FromDate");
String nDate2 = rs.getString("ToDate");
Date newDate1 = formatterDB.parse(nDate1);
Date newDate2 = formatterDB.parse(nDate2);

Date sd = formatter.parse("2013-08-22");
Date ed = formatter.parse("2013-08-24");
Date exd = formatter.parse("2013-08-23");

要验证的第一个条件是,exd位于sd,ed之间,如果为真,则exd也应位于newDate1,newDate2之间,如果为真,则将从dB中获取其他元素。

请不要认为这两个日期的来源是不同的,其中一个日期来自具有完全不同格式的dB,而另一个日期是作为字符串输入给出的,它们需要进行比较,因此它们有不同的格式。

为了更清楚地说明这一点,下面是一个例子:

我在2013-08-23给出了exd的输入,sded的输入给出了newDate1为2013-08-28( dB格式),newDate2为2013-09-01( dB格式),但它接受输入exd并获取另一列。

**我已经摘录了相关代码,对于任何问题,请输入评论。任何帮助都是非常感谢的。提前谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-27 05:25:16

您必须使用java内置日期功能。

下面是一个小例子:

代码语言:javascript
复制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2009-12-31");
Date date2 = sdf.parse("2010-01-31");

if(date1.compareTo(date2)>0){
    System.out.println("Date1 is after Date2");
}else if(date1.compareTo(date2)<0){
    System.out.println("Date1 is before Date2");
}else if(date1.compareTo(date2)==0){
    System.out.println("Date1 is equal to Date2");
}else{
    System.out.println("How to get here?");
}

编辑:与用户问题有关的示例

exdnot between newDate1和newDate2!

代码语言:javascript
复制
public class DateCompare {

public static void main(String args[]) throws ParseException
{
    String newPattern = "yyyy-MM-dd HH:mm:ss.SSS";
    SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    String nDate1 = "2013-08-29 11:11:11.000";
    String nDate2 = "2013-09-01 11:11:11.000";
    Date newDate1 = formatterDB.parse(nDate1);
    Date newDate2 = formatterDB.parse(nDate2);


    Date sd = formatter.parse("2013-08-22");
    Date ed = formatter.parse("2013-08-24");
    Date exd = formatter.parse("2013-08-23");


    //Comparing exd to sd and ed
    if(sd.compareTo(exd) * exd.compareTo(ed) > 0)
    {
        //comparing exd to newDate1 and newDate2
        if(newDate1.compareTo(exd) * exd.compareTo(newDate2) > 0)
        {
            System.out.println("Success : Now you can fetch data from DB !");
        }
        else
        {
            System.out.println("Oops ! Can't fetch data !");
        }
    }
  }
}

请注意,在这个场景中,如果比较不同格式的日期,if the dates are same, they won't return 0,因为time factor!时间也将进行比较,yyyy-MM-dd格式的日期都以HH:mm:ss.SSS00:00:00.000

票数 2
EN

Stack Overflow用户

发布于 2014-02-27 05:41:46

这里有一个处理这个问题的方法.

代码语言:javascript
复制
int flag=0;    
  if(exd.compareTo(sd)>0 )
       if(exd.compareTo(ed)<0){
             System.out.println(exd+" Lies between"+ sd +"and"+ ed);  
             flag=1;
       } 
  /*convert from newPattern to "yyyy-MM-dd"*/
  SimpleDateFormat formatterDB = new SimpleDateFormat(newPattern);
  Date temp = formatterDB.parse(nDate1);
  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  String temp1 = formatter.format(temp);
  Date newDate1 = formatter.parse(temp1); 
  if(flag==1)
     if(exd.compareTo(newDate1)>0)
         if(exd.compareTo(newDate2)<0){
               /* your code to fetch other item from DB*/
         }
票数 1
EN

Stack Overflow用户

发布于 2014-02-27 09:49:05

简短回答

我的这两个答案同时包含了解决问题所需的概念和示例代码:

日期与日期-时间

您有一些日期值和一些日期时间值。您需要就日期唯一值与日期-时间的关系作出决定。

一种可能是,只有约会才被认为是一天中的第一分钟,比如2014-01-02 00:00:00。请注意,第一时刻的时间通常是00:00:00,但不一定是因为夏时制或其他异常可能会移动时间。例如,01:00:00。Joda-Time将自动将时间调整为一天中的第一分钟,此时将只将日期字符串解析为日期时间。但是请注意,您也可以调用withTimeAtStartOfDay (忽略“午夜”-related类/方法,因为它们实际上被创建者所反对)。

另一种可能是,日期只应表示为一段时间,从一天的第一分钟到第二天的第一分钟。

半开

请注意,我指的是“半开放”的方法,其中开始是包容性的,结束是排他性的。半开式一般对时间跨度最有效。

有关半开放时间跨度的更多讨论和示例,请参见我的这个答案这个答案

先解析,然后再处理

首先将日期字符串和日期字符串解析为日期时间对象。一旦您手头有一些合理的对象,然后继续您的比较和业务逻辑。

尤达-时间

java.util.Date和.Calendar类是出了名的麻烦。避开他们。

相反,可以使用开源库尤达-时间或Java8中的新java.time包

Joda-Time提供了三个类来处理一段时间:期间、持续时间和间隔。它们包括非常方便的比较方法,包括containsabutsoverlapgap

搜索StackOverflow

搜索"joda间隔“以查找其他示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22059696

复制
相关文章

相似问题

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