【问题标题】:Increment and print all days in a month增加并打印一个月内的所有天数
【发布时间】:2016-03-08 04:39:23
【问题描述】:

我已经开始编写一些代码,需要打印一个月内的所有日期,我可以通过每天添加一个来做到这一点,但必须有一种更短的方法,我错过了。这是我目前的代码。

我知道它不是最漂亮的,我想知道如何打印日期,同时它在一月份的每一天递增,而不必每次都不断地加 1,然后每次都打印。

public static void main(String [] args) {

Calendar calendar = Calendar.getInstance()
calendar.set.(Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]));

System.out.println(calendar.getTime());
calendar.add(Calendar.DATE, 1);
System.out.println(calendar.getTime());

}

}

【问题讨论】:

  • 使用循环让您的生活更轻松。
  • 那是哪个版本的 Java?如果是 8,为什么不使用 JSR 310?如果 7 或更少,您为什么不使用 Joda Time?

标签: java


【解决方案1】:

使用 Java 8 本地日期的简单示例,假设问题中的输入

import java.time.LocalDate;

public class Test
{
    public static void main(String[] args)
    {
        LocalDate ld = LocalDate.of(Integer.parseInt(args[0]), Integer.parseInt(args[1]), Integer.parseInt(args[2]));
        do {
            System.out.println(ld.toString());
            ld = ld.plusDays(1);
        } while (ld.getDayOfMonth() > 1);  // arive at 1st of next month
    }
}   

【讨论】:

    【解决方案2】:

    这里有一个简单的例子,它打印了一个月中的所有天数。时间部分已设置为零。

    在这里,我们打印了 2016 年 3 月的所有日子。

    Tue Mar 01 00:00:00 MST 2016
    Wed Mar 02 00:00:00 MST 2016
    Thu Mar 03 00:00:00 MST 2016
    Fri Mar 04 00:00:00 MST 2016
    Sat Mar 05 00:00:00 MST 2016
    Sun Mar 06 00:00:00 MST 2016
    Mon Mar 07 00:00:00 MST 2016
    Tue Mar 08 00:00:00 MST 2016
    Wed Mar 09 00:00:00 MST 2016
    Thu Mar 10 00:00:00 MST 2016
    Fri Mar 11 00:00:00 MST 2016
    Sat Mar 12 00:00:00 MST 2016
    Sun Mar 13 00:00:00 MST 2016
    Mon Mar 14 00:00:00 MDT 2016
    Tue Mar 15 00:00:00 MDT 2016
    Wed Mar 16 00:00:00 MDT 2016
    Thu Mar 17 00:00:00 MDT 2016
    Fri Mar 18 00:00:00 MDT 2016
    Sat Mar 19 00:00:00 MDT 2016
    Sun Mar 20 00:00:00 MDT 2016
    Mon Mar 21 00:00:00 MDT 2016
    Tue Mar 22 00:00:00 MDT 2016
    Wed Mar 23 00:00:00 MDT 2016
    Thu Mar 24 00:00:00 MDT 2016
    Fri Mar 25 00:00:00 MDT 2016
    Sat Mar 26 00:00:00 MDT 2016
    Sun Mar 27 00:00:00 MDT 2016
    Mon Mar 28 00:00:00 MDT 2016
    Tue Mar 29 00:00:00 MDT 2016
    Wed Mar 30 00:00:00 MDT 2016
    Thu Mar 31 00:00:00 MDT 2016
    

    此代码适用于 Java 6、Java 7 和 Java 8。

    package com.ggl.testing;
    
    import java.util.Calendar;
    
    public class PrintMonth {
    
        public static void main(String[] args) {
    
            Calendar calendar = Calendar.getInstance();
    
            if (args.length == 2) {
                int year = Integer.parseInt(args[0]);
                int month = Integer.parseInt(args[1]);
                calendar.set(year, month, 1);
            }
    
            int month = calendar.get(Calendar.MONTH);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.set(Calendar.HOUR_OF_DAY, 0);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.MILLISECOND, 0);
    
            while (calendar.get(Calendar.MONTH) == month) {
                System.out.println(calendar.getTime());
                calendar.add(Calendar.DATE, 1);
            }
    
        }
    
    }
    

    【讨论】:

    • 非常有帮助,谢谢
    【解决方案3】:
    public static void main(String[] args) {
            LocalDate date = LocalDate.of(Integer.parseInt(args[0]), Integer.parseInt(args[1]), 1);
    
            for (int i = 0; i < date.lengthOfMonth(); i++) {
                System.out.println(date);
                date = date.plusDays(1);
            }
    
        }
    

    【讨论】:

      【解决方案4】:

      这是一个工作示例:

      https://github.com/OpenGamma/OG-Platform/blob/master/projects/OG-Util/src/main/java/com/opengamma/util/time/LocalDateRange.java#L113

        public static LocalDateRange of(LocalDate startDateInclusive, LocalDate endDate, boolean endDateInclusive) {
          ArgumentChecker.notNull(startDateInclusive, "startDate");
          ArgumentChecker.notNull(endDate, "endDate");
          if (endDateInclusive == false && endDate.isBefore(LocalDate.MAX)) {
            endDate = endDate.minusDays(1);
          }
          if (endDate.isBefore(startDateInclusive)) {
            throw new IllegalArgumentException("Start date must be on or after end date");
          }
          return new LocalDateRange(startDateInclusive, endDate);
        }
      

      【讨论】:

      • 什么是 LocalDateRange ?参数检查器?如果您使用的是 3rd 方库,通常会提及它。
      • 我不明白这段代码如何回答一个月中所有日子打印的问题。这段代码中没有一个打印,输入参数没有解释....
      • 我想知道投票的原因。这个答案不完整,没有给出答案
      【解决方案5】:

      这个例子怎么样?

      @JRubyMethod(name = {"asctime", "ctime"})
          public RubyString asctime() {
              DateTimeFormatter simpleDateFormat;
      
              if (dt.getDayOfMonth() < 10) {
                  simpleDateFormat = ONE_DAY_CTIME_FORMATTER;
              } else {
                  simpleDateFormat = TWO_DAY_CTIME_FORMATTER;
              }
              String result = simpleDateFormat.print(dt);
              return getRuntime().newString(result);
          }
      

      完整来源:http://code.openhub.net/file?fid=VJqxO5av-KgtoQFAp9juIzamnTc&cid=KOJoiAJBzj4&s=Increment%20and%20print%20all%20days%20in%20a%20month&pp=0&fl=Java&ff=1&filterChecked=true&fp=144796&mp,=1&ml=0&me=1&md=1&projSelected=true#L0

      【讨论】:

      • 为什么要使用 jruby 来解决一个简单的 java 问题?您希望用户下载并安装 jruby 以在 java 中打印月份的日期??
      • ONE_DAY_CTIME_FORMATTER 是什么? TWO_DAY_CTIME_FORMATTER
      • 我想知道投票的原因。这个答案不完整,没有给出答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多