【问题标题】:Today is nth day of year [duplicate]今天是一年中的第 n 天 [重复]
【发布时间】:2018-07-05 00:21:03
【问题描述】:

我想得到天数..即 1 月 1 日是第 1 天 1 月 2 日是第 2 天 2 月 1 日是第 32 天,12 月 31 日是第 365 天或第 366 天,具体取决于闰年与否

我使用过各种技术,例如 date1 - date2 等... 但似乎没有什么对我有用的逻辑可能是..我想要的是计算并添加已经过去的月数加上运行月份的天数,即今天是 2012 年 9 月 21 日是天数( 31(一月)+29(二月)+31(三月)+30(四月)+31(五月)+30(六月)+31(七月)+31(八月)+20(九月))=第264天每天过去都会继续加一...谢谢

我的代码

int year = Calendar.getInstance().get(Calendar.YEAR);
            GregorianCalendar gc = new GregorianCalendar();
            gc.set(GregorianCalendar.DAY_OF_MONTH, 8);
            gc.set(GregorianCalendar.MONTH, GregorianCalendar.JUNE);
            gc.set(GregorianCalendar.YEAR, year);
            int numberofDaysPassed=gc.get(GregorianCalendar.DAY_OF_YEAR);

numberofDaysPassed 给了我 160,不想要的结果

【问题讨论】:

  • 对于您使用的代码,正确答案是 2012 年 6 月 8 日是一年中的第 160 天
  • @onkar 你测试了那个代码。 11,12,13,111,112,113 天..???如果没有,请先检查...
  • 嘿伙计,我不需要那个 siffux 部分..st,nd,rd.....
  • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleTextFormat 现在是 legacy,被 java.time 类取代。见Tutorial by Oracle

标签: java android


【解决方案1】:
Calendar calendar = Calendar.getInstance();
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);  

或者使用 Joda-API

DateTime dt = new DateTime();  
int dayOfYear = dt.getDayOfYear();  

如果需要'th'部分,使用switch语句

switch (dayOfYear > 20 ? (dayOfYear % 10) : dayOfYear) {
            case 1:  return dayOfYear + "st";
                     break;
            case 2:  return dayOfYear + "nd";
                     break;
            case 3:  return dayOfYear + "rd";
                     break;
            default:  return dayOfYear + "th";
                     break;   
} 

【讨论】:

  • 关于您的switch 声明:如果dayOfYear 是例如11 或21,会发生什么情况? (你想要:11 日、21 日)。
  • 所有 != 1 和 != 2 和 != 3 的数字都将以 th 结尾。
  • @Jesper 你可以使用switch(dayOfYear > 20 ? (dayOfYear % 10) : dayOfYear)
  • @Ilya 我的评论是为了表明它是错误的。例如,如果dayOfYear 是 21,那么您需要 21 号,而不是 21 号。或者 172 应该是第 172 位,而不是第 172 位。
  • @Jesper 抱歉,英语不是我的母语。在这种情况下,Ridcully 的评论很有帮助
【解决方案2】:

LocalDate

使用 Java 8 及更高版本中内置的 java.time 包中的 LocalDate 类。

获取日期:

int dayOfYear = LocalDate.now().getDayOfYear();

…并设置日期:

LocalDate localDate = LocalDate.now().withDayOfYear( 195 );

【讨论】:

    【解决方案3】:

    尝试将日历上的日期设置为问题中的日期,您要求设置为 9 月 21 日,但您在代码中输入了 6 月 8 日。

    这是给出 265 的更新代码:

        int year = Calendar.getInstance().get(Calendar.YEAR);
        GregorianCalendar gc = new GregorianCalendar();
        gc.set(Calendar.DAY_OF_MONTH, 21); // you asked for 21st Sept but put 8
        gc.set(Calendar.MONTH, Calendar.SEPTEMBER); // you aksed for 21st Sept but put JUNE
        gc.set(Calendar.YEAR, year);
        int numberofDaysPassed = gc.get(Calendar.DAY_OF_YEAR);
        System.out.println(numberofDaysPassed);
    

    顺便说一句,您不需要在日历上设置月、日等,它默认为“现在”...

    【讨论】:

    • 好的伙计,谢谢你指出我的错误。
    • 嘿,这个答案我想我需要手动输入日、月、年,我想,那个是直接给我的......
    【解决方案4】:

    使用 Java 8,您可以这样做: int n = LocalDate.now().get(ChronoField.DAY_OF_YEAR);

    【讨论】:

      【解决方案5】:
      Calendar ca1 = Calendar.getInstance();    
      int DAY_OF_YEAR=ca1.get(Calendar.DAY_OF_YEAR);
      System.out.println("Day of Year :"+DAY_OF_YEAR);
      

      在你的 logcat 中检查结果..

      【讨论】:

        【解决方案6】:
        DateTime dt = new DateTime();  
        String dayOfYear = dt.getDayOfYear().toString();
        String day = "";
        
        if(dayOfYear.endsWith("1") && !dayOfYear.endsWith("11"))
            day = dayOfYear+"st";
        else if(dayOfYear.endsWith("2") && !dayOfYear.endsWith("12"))
            day = dayOfYear+"nd";
        else if(dayOfYear.endsWith("3") && !dayOfYear.endsWith("13"))
            day = dayOfYear+"rd";
        else 
            day = dayOfYear+"th";
        
        System.out.println("Day of year :- "+ day);
        

        【讨论】:

        • 先试一试...效果很好...
        猜你喜欢
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多