Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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
Java LocalDate如何利用_Java_Dayofweek_Localdate_Date Manipulation - Fatal编程技术网

Java LocalDate如何利用

Java LocalDate如何利用,java,dayofweek,localdate,date-manipulation,Java,Dayofweek,Localdate,Date Manipulation,输入列表 自日期ex)2020-10-01 截至日期(ex)2020-10-30 列表[星期几]前[星期日,星期一….] 列表[周]ex)[1,4,5] 我想知道如何在这两个日期之间确定一周中的某一天。 谢谢 从日期ex)2020-10-01到日期ex)2020-10-30 您的输入字符串已经是日期的ISO8601格式,因此可以在不显式提供DateTimeFormatter的情况下对其进行解析。为了以自定义格式获取输出字符串(例如,yyyy-MM-dd),您需要使用DateTimeFormatt

输入列表

  • 自日期ex)2020-10-01
  • 截至日期(ex)2020-10-30
  • 列表[星期几]前[星期日,星期一….]
  • 列表[周]ex)[1,4,5]
  • 我想知道如何在这两个日期之间确定一周中的某一天。 谢谢

    从日期ex)2020-10-01到日期ex)2020-10-30

    您的输入字符串已经是日期的ISO8601格式,因此可以在不显式提供
    DateTimeFormatter
    的情况下对其进行解析。为了以自定义格式获取输出字符串(例如,
    yyyy-MM-dd
    ),您需要使用
    DateTimeFormatter
    格式化日期对象

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
        public static void main(String[] args) {
            String inputStrDate = "2020-10-01";
            LocalDate date = LocalDate.parse(inputStrDate);
    
            String outputStrDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            System.out.println(outputStrDate);
        }
    }
    
    输出:

    2020-10-01
    
    2020-10-01
    
    但是,如果您的输入是其他格式,则需要使用
    DateTimeFormatter
    将其解析为日期对象

    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
        public static void main(String[] args) {
            // Formatter for input string
            DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy");
    
            String inputStrDate = "10-01-2020";
            LocalDate date = LocalDate.parse(inputStrDate, inputFormat);
    
            // Formatter for output string
            DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    
            String outputStrDate = date.format(outputFormat);
            System.out.println(outputStrDate);
        }
    }
    
    输出:

    2020-10-01
    
    2020-10-01
    

    java.time了解有关日期时间API的更多信息 我也建议您使用java.time(现代java日期和时间API)进行日期工作。我的目标是:

        LocalDate fromDate = LocalDate.of(2020, Month.OCTOBER, 1);
        LocalDate toDate = LocalDate.of(2020, Month.OCTOBER, 30);
        List<DayOfWeek> daysOfWeek = List.of(DayOfWeek.SUNDAY, DayOfWeek.MONDAY);
        List<Integer> weeks = List.of(1, 4, 5);
        
        if (! YearMonth.from(fromDate).equals(YearMonth.from(toDate))) {
            throw new IllegalStateException("Covering more than one month is not yet supported");
        }
        
        WeekFields wf = WeekFields.SUNDAY_START;
        for (int week : weeks) {
            for (DayOfWeek dow : daysOfWeek) {
                LocalDate date = fromDate.with(wf.weekOfMonth(), week)
                        .with(wf.dayOfWeek(), dow.get(wf.dayOfWeek()));
                // Is date inside interval?
                if (! (date.isBefore(fromDate)  || date.isAfter(toDate))) {
                    System.out.println(date);
                }
            }
        }
    
    打印的日期是10月4日和5日的星期日和星期一,以美国方式定义星期,星期从星期日开始(因为您在示例列表中首先提到了星期日),第1周是10月1日的一周。第一周的星期日和星期一不打印,因为它们在10月1日之前,即9月

    考虑一下你需要哪一周的计划。例如,您可以使用
    WeekFields.ISO
    WeekFields.of(Locale.getDefault())

    我先找到一周,然后是一周中的某一天,因为对我来说这是自然的方式。我需要使用
    WeekFields
    对象进行两次调整,以确保所选的周计划得到遵守

    如果您需要覆盖一个以上的日历月,请迭代这些月,并对每个月执行相同的操作。还要检查结果日期是否在月份内,以便忽略月份边界附近的重复项

    for(LocalDate d = fromDate; !d.isAfter(toDate); d = d.plusDays(1)) { // 일정 시작 ~ 끝 loop
            for (Integer wf : weekOfMonth) {
                for (Integer df : dayOfWeek) {
                    offDay = d.with(fieldWeek, wf)
                            .with(fieldDay, df);
    
                    
                    if (d.getMonth() == offDay.getMonth() && !offDays.contains(offDay)) {
                        offDays.add(offDay);
                    }
                }
            }
        }
    
    很抱歉问错了问题。 非常感谢


    我已经做到了,但我已经研究了您的代码。

    老实说,按照堆栈溢出标准,这不是一个很好的问题。即使你不知道从哪里开始,也要从搜索开始,看看你是否可以一起尝试。如果失败了,发布一个问题,并解释你发现了什么,你尝试了什么,以及它是如何失败的,我们马上就有了一个更好的起点来帮助你进步。无论如何,不要绝望,学习如何提出一个好问题需要一点时间,只要在你提出更多问题的同时继续学习。回头见。周的列表,是月的那一周,年的那一周,还是…?这两个日期是否总是在同一个月,或者至少在同一年,或者至少相隔一年?这是否回答了你的问题?在这个问题上,你能用自己一周中的几天来代替周六和周日吗?