簡體   English   中英

Java-獲取兩個日期之間的日期,產生意外結果

[英]Java -Get a Date between two Dates, Giving unexpected result

所以我試圖在兩個設定時間之間獲得一個隨機時間。 但是結果日期不是我所期望的。

我期望得到的結果在我給出的最早和最晚的兩個日期之內,但是我得到的日期是第二天,好像我花的時間似乎應該減去12我得到這個答案。 這是日志獲取: http : //prntscr.com/6205yh

private long nextLong(Random rng, long n) { long bits, val; do { bits = (rng.nextLong() << 1) >>> 1; val = bits % n; } while (bits - val + (n - 1) < 0L); return val; }

@SuppressWarnings("deprecation")
public Calendar getNextDate() {
    try
    {
        Calendar now = Calendar.getInstance(Locale.getDefault());
        String earliest = getConfig().getString("Date.Spawn Earliest");
        String latest = getConfig().getString("Date.Spawn Latest");

        // Format the hours and minutes into dates
        SimpleDateFormat format = new SimpleDateFormat("HH:mm");
        Date earliestDate = format.parse(earliest);
        Date latestDate = format.parse(latest);

        // Figure out the random time between the two
        long e = earliestDate.getTime();
        long l = latestDate.getTime();
        long d = nextLong(new Random(), l - e) + e;
        Date date = new Date(d);

        // Update the hours and minutes into a new Calander with todays day,month and year.
        Calendar then = Calendar.getInstance(Locale.getDefault());
        System.out.println(date.getHours()+":"+date.getMinutes());
        then.set(Calendar.HOUR, date.getHours());
        then.set(Calendar.MINUTE, date.getMinutes());

        // If it is later then the random time and nows hours are still higher then the latest time; add 7 days to get next week
        if (now.after(then) && now.getTime().getHours() > latestDate.getHours())
            then.add(Calendar.DAY_OF_MONTH, 7);

        System.out.println("At the moment it is:  " + now.getTime().toString());
        System.out.println("Dragon will spawn at: " + then.getTime().toString());

        return then;
    }
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
}`

如果有人可以向我解釋發生了什么事,我將不勝感激。

這可能更好:)

Date dateStart;
Date dateEnd;
int diff = (int) (dateEnd.getTime() - dateStart.getTime());
Date randomDate = new Date(dateStart.getTime()
      + new Random(System.currentTimeMillis()).nextInt(diff));
Calendar then = Calendar.getInstance();
then.setTime(randomDate);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM