6

まず、これは私が Java 1 のクラスで行き詰っている簡単な質問です。これは、私がすでに「今日」の 8:49:12 として設定した静的な時間であり、これが真夜中から「真夜中まで」何秒経過したかを把握する必要があります。8時間49分12秒。ここに私のコードがあります:

hour    = 8;
minute  = 59;
second  = 32;
System.out.println("The static time used for this program was: " + hour + ":" + minute + ":" + second);

私の問題は、真夜中以降の時間取得する方法がわからないことです。

したがって、基本的に出力は次のようにする必要があります。

Number of seconds since midnight: 
Number of seconds to midnight:

後のスペースは秒です。

ありがとうございます。その理由と、これを解決する方法をどのように選択したかを説明してください。学びたい :P

4

7 に答える 7

9

この簡単な数学を試してください:

System.out.println("Number of seconds since midnight:" +(second + (minute*60) + (hour*3600)));
System.out.println("Number of seconds to midnight:" +((60-second) + ((60-1-minute)*60) + (24-1-hour)*3600));
于 2013-09-24T06:55:10.533 に答える
3

時間の特異性を考えると、単純にCalendarAPIを使用できます

Calendar fromMidnight = Calendar.getInstance();
fromMidnight.set(Calendar.HOUR, 0);
fromMidnight.set(Calendar.MINUTE, 0);
fromMidnight.set(Calendar.SECOND, 0);
fromMidnight.set(Calendar.MILLISECOND, 0);

Calendar toMidnight = Calendar.getInstance();
toMidnight.setTime(fromMidnight.getTime());
toMidnight.add(Calendar.DATE, 1);

System.out.println(fromMidnight.getTime());
System.out.println(toMidnight.getTime());

Calendar toFromTime = Calendar.getInstance();
toFromTime.set(Calendar.HOUR, 8);
toFromTime.set(Calendar.MINUTE, 59);
toFromTime.set(Calendar.SECOND, 32);
toFromTime.set(Calendar.MILLISECOND, 0);

long secondsFromMidnight = (toFromTime.getTimeInMillis() - fromMidnight.getTimeInMillis()) / 1000;
long secondsToMidnight = (toMidnight.getTimeInMillis() - toFromTime.getTimeInMillis()) / 1000;

System.out.println("from = " + secondsFromMidnight + "; to " + secondsToMidnight);

どの出力...

from = 32372; to 54028

または、JodaTimeを使用できます...

MutableDateTime now = MutableDateTime.now();
now.setMillisOfDay(0);
now.setSecondOfDay(32);
now.setMinuteOfDay(59);
now.setHourOfDay(8);
DateTime fromMidnight = now.toDateTime().toDateMidnight().toDateTime();
DateTime toMidnight = fromMidnight.plusDays(1);

Duration duration = new Duration(fromMidnight, toMidnight);

Duration dFromMidnight = new Duration(fromMidnight, now);
System.out.println("From midnight: " + dFromMidnight.getStandardSeconds());

Duration dToMidnight = new Duration(now, toMidnight);
System.out.println("To Midnight: " + dToMidnight.getStandardSeconds());

どの出力...

From midnight: 32372
To Midnight: 54028
于 2013-09-24T07:13:24.950 に答える
3
final static int SEC_IN_MIN = 60;
final static int SEC_IN_HOUR = SEC_IN_MIN * 60;
int secFromMidnight = hour * SEC_IN_HOUR + minute * SEC_IN_MIN + second;
int secToMidnight = (24 * SEC_IN_HOUR) - secFromMidnight;
于 2013-09-24T06:52:16.037 に答える
0

あなたの答えは java.util.Calendar クラスにあります。get()/set() メソッドを参照してください: http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html

于 2013-09-24T06:56:08.923 に答える
0
import java.util.Calendar;

public class HelloWorld{

 public static void main(String []args){
    int hour    = 8;
    int minute  = 59;
    int second  = 32;
    System.out.println("The static time used for this program was: " + hour + ":" + minute + ":" + second);
    final Calendar currentTime = Calendar.getInstance();
    currentTime.set(2013,Calendar.SEPTEMBER,24,8,59,32);
    final Calendar midNight = Calendar.getInstance();
    midNight.clear();
    midNight.set(2013, Calendar.SEPTEMBER, 25);
    System.out.println(.001*(midNight.getTimeInMillis() - currentTime.getTimeInMillis()));
 }

}

ライブラリの使用を検討するか、ライブラリをCalendar試してくださいJodaTime

http://www.joda.org/joda-time/

于 2013-09-24T07:03:58.400 に答える