找到下一个星期一6:00的Java日期,例如

问题描述 投票:0回答:4
public static long findNextTimeOfTheWeek(long offset) { return System.currentTimeMillis() - ((System.currentTimeMillis() - offset) % 604800000) + 604800000; }

如果有人可以提供帮助,这将不胜感激。如果需要再澄清,请询问。 P.S. 604800000是一周内的毫秒数。

java.Time
使用Java 8中内置的框架8。

java.time

java date time
4个回答
4
投票

import java.time.DayOfWeek; import java.time.LocalDateTime; import static java.time.temporal.TemporalAdjusters.nextOrSame; LocalDateTime now = LocalDateTime.now(); // 2015-11-22T09:32:50.045 (Sunday) now.with(nextOrSame(DayOfWeek.MONDAY)); // 2015-11-23T09:32:50.045 (Monday)

我建议您使用

import static java.time.temporal.TemporalAdjusters.next; now.with(next(DayOfWeek.MONDAY)); // 2015-11-30T09:32:50.045 (Monday)
类,您可以轻松地操作它,然后使用
Calendar

来获取一个

Date
对象。请参阅下面的示例,它只是做您想做的事情:

0
投票

更多信息:


Calendar类文档

    

您应该日历类。您指定日期,并添加天数,几个月或几年
import java.util.Calendar;
import java.util.Locale;
import java.util.Scanner;

public class Main {

    public static int dayOfWeekIWant(final String dayOfWeekIWantString)
            throws Exception {

        final int dayOfWeekIWant;

        if ("sunday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.SUNDAY;
        } else if ("monday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.MONDAY;
        } else if ("tuesday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.TUESDAY;
        } else if ("wednesday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.WEDNESDAY;
        } else if ("thursday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.THURSDAY;
        } else if ("friday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.FRIDAY;
        } else if ("saturday".equalsIgnoreCase(dayOfWeekIWantString)) {
            dayOfWeekIWant = Calendar.SATURDAY;
        } else {
            throw new Exception(
                    "Invalid input, it must be \"DAY_OF_WEEK HOUR\"");
        }

        return dayOfWeekIWant;
    }

    public static String getOrdinal(int cardinal) {
        String ordinal = String.valueOf(cardinal);

        switch ((cardinal % 10)) {
        case 1:
            ordinal += "st";
            break;
        case 2:
            ordinal += "nd";
            break;
        case 3:
            ordinal += "rd";
            break;
        default:
            ordinal += "th";
        }

        return ordinal;

    }

    public static void printDate(Calendar calendar) {
        String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK,
                Calendar.LONG, Locale.ENGLISH);
        String dayOfMonth = getOrdinal(calendar.get(Calendar.DAY_OF_MONTH));
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        System.out.printf("%s %s %02d:%02d", dayOfWeek, dayOfMonth, hour, minute);
    }

    public static void main(String[] args) {

        Calendar calendar = Calendar.getInstance();
        Scanner scanner = new Scanner(System.in);

        final int today = calendar.get(Calendar.DAY_OF_WEEK);

        System.out.println("Please, input the day of week you want to know:");

        boolean inputOk = false;

        while (!inputOk)

            try {
                String input = scanner.nextLine();
                String[] split = input.split("\\s");
                String dayOfWeekIWantString = split[0];

                String[] splitHour = split[1].split(":");
                int hour = Integer.parseInt(splitHour[0]);
                int minute = Integer.parseInt(splitHour[1]);

                int dayOfWeekIWant = dayOfWeekIWant(dayOfWeekIWantString);

                int diff = (today >= dayOfWeekIWant) ? (7 - (today - dayOfWeekIWant))
                        : (dayOfWeekIWant - today);

                calendar.add(Calendar.DAY_OF_WEEK, diff);
                calendar.set(Calendar.HOUR_OF_DAY, hour);
                calendar.set(Calendar.MINUTE, minute);
                calendar.set(Calendar.SECOND, 0);
                calendar.set(Calendar.MILLISECOND, 0);

                inputOk = true;

            } catch (Exception e) {

                // Using a generic exception just for explanation purpose
                // You must create a specific Exception
                System.out
                        .println("Invalid input, you must enter a valid input in format: \"DAY_OF_WEEK HOUR\"");
                continue;
            }

        printDate(calendar);

    }
}

结果将是: 它的星期日 日期=太阳3月6日05:00:00 MST2011如果要格式化日期对象,请检查dateformat类:

0
投票

//Here you specify the date the constructor are (year,month,day,hour_od_day,minutes) Calendar calendar = new GregorianCalendar(2011, Calendar.MARCH, 1, 5, 0); calendar.add(Calendar.DAY_OF_MONTH, 5); //Adds five days to the date switch (calendar.get(Calendar.DAY_OF_WEEK)) { //Tells to the calendar that i want to know the day of the week case Calendar.SUNDAY: System.out.println("ITS SUNDAY"); break; case Calendar.MONDAY: System.out.println("ITS MONDAY"); break; case Calendar.TUESDAY: System.out.println("ITS TUESDAY"); break; case Calendar.WEDNESDAY: System.out.println("ITS WEDNESDAY"); break; case Calendar.THURSDAY: System.out.println("ITS THURSDAY"); break; case Calendar.FRIDAY: System.out.println("ITS FRIDAY"); break; case Calendar.SATURDAY: System.out.println("ITS SATURDAY"); break; } Date date = calendar.getTime(); //Get the Date object System.out.println("Date = " + date); //prints the date:

Przemekpiotrowskiaanswer the andwer很近,但不是很正确。 那里的代码调用

ZonedDateTime

。我无法想象一个呼叫是最佳的场景。该类无法代表一刻,这是时间表上的点,因为它缺乏时区或从UTC中取消的上下文。 INSTEAD,使用LocalDateTime.now()

表示在特定时区中所见的时刻。在任何给定的时刻,时间和日期,因此每周的日期,随着时区的各个方面都会有所不同。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.