Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
例如,查找下周一6:00的Java日期_Java_Date_Time - Fatal编程技术网

例如,查找下周一6:00的Java日期

例如,查找下周一6:00的Java日期,java,date,time,Java,Date,Time,我正在尝试用Java创建一些代码,其中有人可以确定指定的一周中下一个重复时间的日期。这很难解释,所以我举个例子。假设是3月1日(星期四),用户想知道下一个星期六5:00是什么时候。代码应该输出3月3日,5:00作为日期变量,如果是3月4日,程序应该输出3月10日,依此类推 但是,用户可以指定一周中他们想要的时间。这是通过一个长值完成的,该值以毫秒为单位从星期四0:00开始偏移一周的时间。我很难理解这一点,但到目前为止我得到的是: public static long findNextTimeOf

我正在尝试用Java创建一些代码,其中有人可以确定指定的一周中下一个重复时间的日期。这很难解释,所以我举个例子。假设是3月1日(星期四),用户想知道下一个星期六5:00是什么时候。代码应该输出3月3日,5:00作为日期变量,如果是3月4日,程序应该输出3月10日,依此类推

但是,用户可以指定一周中他们想要的时间。这是通过一个长值完成的,该值以毫秒为单位从星期四0:00开始偏移一周的时间。我很难理解这一点,但到目前为止我得到的是:

public static long findNextTimeOfTheWeek(long offset)
{
    return System.currentTimeMillis() - ((System.currentTimeMillis() - offset) % 604800000) + 604800000;
}

如果有人能帮忙,我们将不胜感激。如果需要更多的澄清,请询问。P.S.604800000是一周内的毫秒数。

我建议您使用

Calendar
类,您可以轻松地操作它,然后使用
Calendar\getTime
获取
Date
对象。请参见下面的示例,它只需执行您想要的操作:

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);

    }
}
更多信息:


你应该上日历课。指定日期并添加天、月或年

   //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: 
结果将是: 今天是星期天 日期=2011年3月6日星期日05:00:00 MST

检查日历类:

如果要格式化Date对象,请检查DateFormat类:

java.time 使用内置在Java8中的
java.time
框架

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)

忙得找不到真正的答案,但这可能会有帮助。看看吧,这会让你的生活更轻松。这看起来并没有那么难——如果你有具体的问题,也许可以多尝试一点,然后发布后续信息。嘿,谢谢你提供的信息。似乎即将到来的夏令时不知怎么搞砸了我。我不知道为什么,但当我将系统时间改为4月4日时,代码似乎执行得很好。无论如何,谢谢你,戴夫·牛顿,看看我用过的,如果你和约会有很多关系的话,它会很完美。一定要看看!