2016-12-30 9 views
1

現在、残りの時間に長時間変換しようとしています。私は持っている長い時間を残りの時間に変換する

long remaining = XXXX 

長いものは、特定の日付のミリ秒です。たとえば:

int weeks; 
int days; 
int hours; 
int minutes; 
int seconds; 

:3,600,000は、int型週間= 0、日= 0、時間= 1、分= 0、秒= 0 私は5つのint型で終わる長くなるように、私はこれを変換することができる方法を生じるはずです前もって感謝します!

DirtyDev

+0

それは何を表していますか?日付からメソッド 'getTime()'の結果?秒数/秒またはその他の単位? –

+0

longは、特定の日付までのミリ秒です。たとえば、3,600,000はint weeks = 0、days = 0、hours = 1、minutes = 0、seconds = 0となります。 – dv02

+0

編集されました。これまでのところ、私はこのような方法がどのように機能するかの背後に論理がないので、何も試していない。 – dv02

答えて

2

まず、私は

static final int SECOND = 1000;  // no. of ms in a second 
static final int MINUTE = SECOND * 60; // no. of ms in a minute 
static final int HOUR = MINUTE * 60; // no. of ms in an hour 
static final int DAY = HOUR * 24;  // no. of ms in a day 
static final int WEEK = DAY * 7;  // no. of ms in a week 

次に定数としてなど、秒、分、時間にミリ秒数を定義することをお勧め、あなたは(%を基本的な部門(/)とモジュラスを使用することができます)操作を使用して必要なものを探します。

+1

それは確かに彼に彼の宿題に良いメモを与えるだろうが、これは本当に彼を助けるだろうと思う。 – AxelH

+0

このメソッドはArithmeticExceptionをスローします。これは、時には0で除算しようとするためです。もう1つの答えがうまくいく – dv02

+0

答えに2つのタイプミスがあります: '残り%時間'は '残りの%時間'でなければなりません。 'remaining%minutes'は' remaining%minute'でなければなりません。これらを訂正すると、ArithmeticExceptionをスローしません。 @DirtyDev –

1

これは、必要な操作を行う必要があります。

long inputTimeInMilliseconds = 93800000; 
    long milliseconds = inputTimeInMilliseconds % 1000; 
    long seconds = (inputTimeInMilliseconds/1000) % 60 ; 
    long minutes = ((inputTimeInMilliseconds/(1000*60)) % 60); 
    long hours = ((inputTimeInMilliseconds/(1000*60*60)) % 24); 
    long days = ((inputTimeInMilliseconds/(1000*60*60*24)) % 7); 
    long weeks = (inputTimeInMilliseconds/(1000*60*60*24*7)); 

    String remainingTime = "time:"+weeks+":"+days+":"+ hours+":"+minutes+":"+seconds+":"+milliseconds; 
    System.out.println(remainingTime); 
+1

他の答え(Alexandru Severin)のコードをはるかに読みやすくしています。 –

2

すみません、私はまだ、私はそれが間違った結果を与えるタイプミスと読みにくいまたはコードで書き込みコードのいずれかに簡単だということを他の回答から集め、あまり批判したくありません。 DirtyDevが、私はあなたがDurationの使用を許可されない場合があることを認識していますが、他の誰のために:

long remaining = 3_600_000; 

    Duration remainingTime = Duration.ofMillis(remaining); 
    long days = remainingTime.toDays(); 
    remainingTime = remainingTime.minusDays(days); 
    long weeks = days/7; 
    days %= 7; // or if you prefer, days = days % 7; 
    long hours = remainingTime.toHours(); 
    remainingTime = remainingTime.minusHours(hours); 
    long minutes = remainingTime.toMinutes(); 
    remainingTime = remainingTime.minusMinutes(minutes); 
    long seconds = remainingTime.getSeconds(); 

    System.out.println("" + weeks + " weeks " + days + " days " 
      + hours + " hours " + minutes + " minutes " + seconds + " seconds"); 

この版画:

0 weeks 0 days 1 hours 0 minutes 0 seconds 

それは完璧ではないですが、私はそれがだと信じ両方、読みが正しいとロバスト。 Durationは数時間から数ナノ秒までの時間を意味していたので、今でも手作業で週を行う必要があります。

新年あけましておめでとうございます。