2016-09-21 55 views
-2

我想要做的是,如果时间为10:00:00,则会执行proc.process,如果时间为11:00:00,则会执行proc.process1如何在Java中比较sysdate时间和字符串时间

     String TimeVal = "11:00:00"; 
         String TimeVal1 = "12:00:00"; 

         DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
         Date date = new Date(); 
         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
         SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm:ss"); 
         Date date1 = sdf.parse(TimeVal); 
         Date date2 = sdf2.parse(TimeVal1); 

         if(date1 == date){ 
         proc.process(variable);  
         } 
         if(date1==date){ 
         proc.process1(variable); 

         proc.process2(variable); 
         proc.process3(variable); 
         proc.process4(variable); 
         proc.process5(variable); 
         proc.process6(variable); 
         proc.process7(variable); 
         proc.process8(variable); 
         proc.process9(variable); 
         proc.process10(variable); 
         proc.process11(variable); 
+0

为什么你不使用java 8的方式? –

+0

要理解的第一件事:==告诉你两个**引用是否指向**相同的**对象。当你解析两个字符串时,你会得到**两个**日期对象;所以你的支票将**总是**为假。您必须改用** equals()**。并认真对待:如果你在这样的超级基础上失败,那么你应该退后一步,忘记你现在要做的事情。因为那你几乎没有什么线索;你最好花几个星期的时间学习**基础**。否则,你将只从一个令人沮丧的时刻进入下一个时刻。因为**没有**你尝试将工作。 – GhostCat

+0

你有什么建议我需要什么基本的学习GhostCat –

回答

1

TL;博士

LocalTime now = LocalTime.now(ZoneId.of("America/Montreal")); 
Boolean isNowWithinRange = 
    ( 
     (! now.isBefore(LocalTime.parse("11:00:00"))) 
     && now.isBefore(LocalTime.parse("12:00:00") 
    ) ; 

详细

accepted answer是一个很好的尝试,但有多个缺陷。

不好的做法,调用now两次,因为你最终做出两个不同时刻的无效比较。调用一次,然后分配给一个变量。

不要忽视时区的关键问题。最好明确地将可选的时区参数传递给now(ZoneId),而不是隐式地依赖JVM的当前默认值,这个默认值可以在任何时候改变。

您可以询问设备当前的默认时区。但如果至关重要,您应该向用户询问/确认。

ZoneId z = ZoneId.of("America/Montreal"); 
LocalTime now = LocalTime.now(z); 

您可以直接将输入字符串解析为LocalTime对象。在日期时间工作

LocalTime start = LocalTime.parse("11:00:00"); 
LocalTime stop = LocalTime.parse("12:00:00"); 

通常的做法是使用的时间跨度上半开的方法。刚开始是包容而结局是独家。使用这种方法始终使您的代码更易于理解,并且不易出错。

提示:说“不开始之前”是一种比较简单的说“等于或晚于开始”的方式。

Boolean isNowWithinRange = ((! now.isBefore(start)) && now.isBefore(stop)) ; 

关于java.time

java.time框架是建立在Java 8和更高版本。这些类代替了令人讨厌的旧日期时间类,例如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。

大部分的java.time功能后移植到Java 6 和ThreeTenABP还适于Android(见How to use…)。

ThreeTen-Extra项目扩展java.time与其他类。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore

0

为什么不简单地使用java 8日期api?

像:

LocalTime firstTime = LocalTime.of(11, 0, 0); 
LocalTime secondTime = LocalTime.of(12, 0, 0); 
LocalTime now = LocalTime.now(); 

if (now.isAfter(startTime) && 
    now.isBefore(endTime)){ 
    //process 
} 
+0

纠正,我无法检查,因为我没有我的当前计算机上的Java 8 –

+0

半开放方法,其中开始包容而结尾是排他性的比较将是:'(!now.isBefore(startTime))&& now.isBefore(endTime)' –

0

如果你要坚持你的日期()对象,你可以比较米利斯:

if(date1.getTime() == date.getTime()) { 
// ... 
}