こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

javaで時刻の判定

String型のtimeに YYYY-MM-DD HH:MM:SS の形式である時刻が入っているとします.
この時刻がYYYY年MM月DD日の20時00分00秒~23時59分59秒内であるかどうかを判定するにはどうしたらよいでしょうか?

文字列のままでは大小比較は困難な気がしますし、GregorianCalendar型もみてみたのですが、いまいち大小比較の仕方がわかりませんでした。
よろしくおねがいします

投稿日時 - 2009-01-07 21:20:26

QNo.4612062

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ご期待に沿った回答になっているかわかりませんが、要件を満たすプログラムを作成してみました。いかがでしょうか?


public class QA4612062 {

public boolean checkTimeDuration(String pDate) throws ParseException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = null;
try {
d = sdf.parse(pDate);
} catch (ParseException e) {
// 日付フォーマット不正
throw e;
}
return checkTimeDuration(d);
}

public boolean checkTimeDuration(Date pDate) {

Calendar c = Calendar.getInstance();
c.setTime(pDate);

if (c.get(Calendar.AM_PM) == Calendar.AM) {
return false;
}
if (c.get(Calendar.HOUR) < 8) {
return false;
}
return true;
}
}


public class QA4612062Test {

private QA4612062 app;

@Before
public void setUp() throws Exception {
app = new QA4612062();
}

@After
public void tearDown() throws Exception {
}

@Test
public void testCheckTimeDuration1() throws ParseException {
String s = "2009-01-21 19:59:59";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(false, app.checkTimeDuration(d));
assertEquals(false, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration2() throws ParseException {
String s = "2009-01-21 20:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(true, app.checkTimeDuration(d));
assertEquals(true, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration3() throws ParseException {
String s = "2009-01-21 23:59:59";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(true, app.checkTimeDuration(d));
assertEquals(true, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration4() throws ParseException {
String s = "2009-01-22 00:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(false, app.checkTimeDuration(d));
assertEquals(false, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration5() throws ParseException {
String s = "2009-01-21 07:59:59";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(false, app.checkTimeDuration(d));
assertEquals(false, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration6() throws ParseException {
String s = "2009-01-21 08:00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = sdf.parse(s);
assertEquals(false, app.checkTimeDuration(d));
assertEquals(false, app.checkTimeDuration(s));
}

@Test
public void testCheckTimeDuration7() throws ParseException {
String s = "2009-01-21";
try {
app.checkTimeDuration(s);
} catch (Exception e) {
Assert.assertTrue(true);
return;
}
fail("日付が正しかったです。");
}
}

投稿日時 - 2009-01-21 18:33:29

import java.util.*;

class Q4612062{

public static void main(String[] args) throws java.text.ParseException{
String time = "2009-11-30 21:22:30";
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
GregorianCalendar c = new GregorianCalendar();
c.setTime(sdf.parse(time));

GregorianCalendar c1 = new GregorianCalendar();
c1.setTime(c.getTime());
c1.set(Calendar.HOUR_OF_DAY ,20);
c1.set(Calendar.MINUTE ,0);
c1.set(Calendar.SECOND ,0);

GregorianCalendar c2 = new GregorianCalendar() ;
c2.setTime(c.getTime());
c2.set(Calendar.HOUR_OF_DAY ,23);
c2.set(Calendar.MINUTE,59);
c2.set(Calendar.SECOND,59);

if (c.compareTo(c1) >= 0 && c.compareTo(c2) <= 0){
System.out.println("passed");
}else{
System.out.println("failed");
}

}
}

投稿日時 - 2009-01-07 22:25:24

ANo.1

文字列比較がダメなら一度int型に変換後比較してはダメでしょうか?

public class Jikokuhikaku{
public static void main(String[] args){
String time="2009-01-07 21:32:45";
int hour=Integer.parseInt(time.substring(11,13));
if(hour>=20&&hour<24){
System.out.println("現在は20:00:00~23:59:59です");
}else{
System.out.println("現在は20:00:00~23:59:59ではありません");
}
}
}

投稿日時 - 2009-01-07 22:04:00

あなたにオススメの質問