今天是一年中的第n天

时间:2012-09-21 06:36:29

标签: java android

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

我使用过各种技术,比如date1 - date2等...... 但似乎没有任何东西对我来说不能正确的逻辑可能是...我想要的是计算并添加已经过去的月份的数量加上运行月份的天数,即今天是2012年9月21日是天数( 31(jan)+29(feb)+31(mar)+30(apr)+31(可能)+30(6月)+31(7月)+31(aug)+20(9月))=第264天他们每天每次都会继续加一个...谢谢

mycode的

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,不受欢迎的结果

6 个答案:

答案 0 :(得分:34)

Calendar calendar = Calendar.getInstance();
int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);  

或使用Joda-API

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

如果您需要'th'部分,请使用switch statement

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

答案 1 :(得分:5)

LocalDate

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

获取日期:

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

...并设置日期:

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

答案 2 :(得分: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);

顺便说一下,您不需要在日历上设置月,日等,它默认为'现在' ...

答案 3 :(得分:3)

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

答案 4 :(得分: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中的结果..

答案 5 :(得分: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);