2013-10-09 5 views
2

Как я могу добавить/вычесть со временем в Java? Например, я пишу программу, которая, когда вы вводите свое время сна, затем добавляет 90 минут (длина 1 цикл сна), чтобы рассказать вам идеальное время пробуждения.Взаимодействие со временем в Java

Scanner input; 
input = new Scanner (System.in); 

int wakeup0; 
int wakeup1; 
int wakeup2; 
int wakeup3; 
int wakeup4; 
int wakeup5; 

System.out.println("When will you be going to bed?"); 
int gotobed = Integer.parseInt(input.nextLine()); 
wakeup0 = gotobed + 90; 
wakeup1 = wakeup0 + 90; 
wakeup2 = wakeup1 + 90; 
wakeup3 = wakeup2 + 90; 
wakeup4 = wakeup3 + 90; 
wakeup5 = wakeup4 + 90; 

System.out.println("You should set your alarm for: "+wakeup0+" "+wakeup1+" "+wakeup2+" "+wakeup3+" "+wakeup4+" or "+wakeup5); 

Как сделать так, чтобы, когда я добавляю 90 до 915 это дает мне 1045, а не 1095?

ответ

0

Во-первых, нет прямого преобразования от 4-значного числа к времени. Так что вам нужно будет использовать Calendar

Из этого вы можете получить текущую дату/время Calendar rightNow = Calendar.getInstance();

Затем вы можете использовать метод добавления, чтобы добавить ваши 90 минут см http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#add(int, INT)

0

Это будет быть проще, если вы отделите часы и минуты, учитывая, что час составлен из 60, а не 100 минут. Попросите пользователя ввести свое время как «HH: MM» и разобрать его, используя раскол («:»), чтобы получить часы и минуты отдельно:

System.out.println("When will you be going to bed?"); 
    String rawBedtime = input.nextLine(); 
    String[] gotobed = rawBedtime.split(":"); 
    int minutes = Integer.parseInt(gotobed[0]); 
    int hours = Integer.parseInt(gotobed[1]); 

Чтобы получить количество часов и минут, чтобы добавить:

int additionalHours = 90/60; 
    int additionalMinutes = 90%60; 

Однако, я бы, вероятно, использовал Java Calendar или Date. Они позаботятся о многом для вас.

0

Не может быть точным ответом на ваш вопрос. Вероятно, вы должны использовать Calendar и SimpleDateFormat в этом случае, как показано ниже.

SimpleDateFormat df = new SimpleDateFormat("HHmm"); 
System.out.println("When will you be going to bed?"); 
String gotobed = input.nextLine(); 
Date date = df.parse(gotobed); 

Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup0 = df.format(calendar.getTime()); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup1 = df.format(calendar.getTime()); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup2 = df.format(calendar.getTime()); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup3 = df.format(calendar.getTime()); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup4 = df.format(calendar.getTime()); 

calendar.add(Calendar.MINUTE, 90); 
String wakeup5 = df.format(calendar.getTime()); 

System.out.println("You should set your alarm for: " + wakeup0 + " " 
     + wakeup1 + " " + wakeup2 + " " + wakeup3 + " " + wakeup4 
     + " or " + wakeup5); 

Для ввода 0900 на выходе будет,

When will you be going to bed? 
0900 
You should set your alarm for: 1030 1200 1330 1500 1630 or 1800 
2

Подсчитайте все в миллисекундах. Это может показаться на первый взгляд неудобным, но математика довольно проста.

При вводе времени сна вам нужно решить, как пользователь это сделает. Будут ли часы и минуты. Будут ли AM/PM или 24-часовые часы. И какой часовой пояс вы будете рассматривать. Все это делается с помощью класса Calendar или DateFormat, и он даст вам одно длинное значение с указанным временем в нем.

После этого добавление смещения по времени легко.

SimpleDateFormat df = new SimpleDateFormat("HHmm"); 
long bedttime = df.parse(inputValue).getTime(); 
long wakeup1 = bedttime + (90 * 60 * 1000); //90 minutes in milliseconds. 
long wakeup2 = wakeup1 + (90 * 60 * 1000); //90 minutes in milliseconds. 
long wakeup3 = wakeup2 + (90 * 60 * 1000); //90 minutes in milliseconds. 
long wakeup4 = wakeup3 + (90 * 60 * 1000); //90 minutes in milliseconds. 
long wakeup5 = wakeup4 + (90 * 60 * 1000); //90 minutes in milliseconds. 

System.out.println("The first wakeup time is "+df.format(new Date(wakeup1))); 

Каждое длинное значение содержит время, в течение которого сигнал тревоги должен погаснуть. Снова используйте форматтер, чтобы создать удобное для пользователя представление этого значения времени.

Смежные вопросы