- 締切済み
javaで時刻の判定
String型のtimeに YYYY-MM-DD HH:MM:SS の形式である時刻が入っているとします. この時刻がYYYY年MM月DD日の20時00分00秒~23時59分59秒内であるかどうかを判定するにはどうしたらよいでしょうか? 文字列のままでは大小比較は困難な気がしますし、GregorianCalendar型もみてみたのですが、いまいち大小比較の仕方がわかりませんでした。 よろしくおねがいします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- world99
- ベストアンサー率64% (20/31)
ご期待に沿った回答になっているかわかりませんが、要件を満たすプログラムを作成してみました。いかがでしょうか? 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("日付が正しかったです。"); } }
- himajin100000
- ベストアンサー率54% (1660/3060)
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"); } } }
- zozy
- ベストアンサー率60% (20/33)
文字列比較がダメなら一度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ではありません"); } } }