21

我想获得天数.. 即 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,不想要的结果

4

6 回答 6

41
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;   
} 
于 2012-09-21T06:38:31.640 回答
11

LocalDate

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

获取日期:

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

…并设置一年中的一天:

LocalDate localDate = LocalDate.now().withDayOfYear( 195 );
于 2015-12-17T16:02:24.227 回答
4

尝试将日历上的日期设置为问题中的日期,您要求 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);

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

于 2012-09-21T06:39:48.093 回答
3

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

于 2015-10-13T06:20:52.177 回答
2
Calendar ca1 = Calendar.getInstance();    
int DAY_OF_YEAR=ca1.get(Calendar.DAY_OF_YEAR);
System.out.println("Day of Year :"+DAY_OF_YEAR);

检查你的logcat中的结果..

于 2012-09-21T06:39:12.277 回答
1
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-09-21T06:42:53.863 回答