2012-09-21 10 views
9

Chcę uzyskać liczbę dnia .. tzn 01 stycznia jest dniem 1 02 stycznia to dzień 2 01 lutego jest dzień 32 i 31 grudnia to dzień 365 lub 366 w zależności od roku przestępnego albo nieDzisiaj jest n-ty dzień roku

użyłem wszystkich technik, takich jak date1 - date2 etc ... ale nic nie działa dla mnie nie mogę uzyskać logiki w prawo może być .. to, co chcę, to liczyć i dodać numer miesiące, które minęły plus liczba dni z bieżącego miesiąca, tj. dzisiaj jest 21 września 2012 r. to numer dnia (31 (jan) +29 (feb) +31 (mar) +30 (mar) +31 (maj) +30 (czerwiec) +31 (lipiec) +31 (aug) +20 (sept)) = 264 dzień i będą dodawać plus jeden za każdym razem, gdy minie dzień ... dzięki

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 daje mi 160, niepożądany wynik

+0

kodu, którego używasz, jest to właściwa odpowiedź 08 czerwca 2012 to 160. dzień roku –

+0

@onkar przetestuj ten kod. z 11,12,13,111,112,113 dni .. ??? jeśli nie, to najpierw sprawdź ... –

+0

Hej kolego Nie potrzebuję tego siffux part..st, nd, rd ..... –

Odpowiedz

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

lub używając Joda-API

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

Jeśli potrzebujesz 'th' część, switch użycie

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

O instrukcji 'switch': Co się stanie, jeśli' dayOfYear' ma na przykład 11 lub 21? (Chciałbyś: 11, 21). – Jesper

+0

Wszystkie liczby, które! = 1 i! = 2 i! = 3 będą kończyły 'th'. – Ilya

+2

@Jesper Możesz użyć 'switch (dayOfYear> 20? (DayOfYear% 10): dayOfYear)' – Ridcully

2
Calendar ca1 = Calendar.getInstance();  
int DAY_OF_YEAR=ca1.get(Calendar.DAY_OF_YEAR); 
System.out.println("Day of Year :"+DAY_OF_YEAR); 

sprawdzić wynik w swojej LogCat ..

3

Spróbuj ustawić datę na kalendarzu daty w błąd, poprosił o 21 września, ale można umieścić 8 czerwca w kodzie.

Oto zaktualizowany kod, który daje 265 zamiast:

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

Nawiasem mówiąc nie trzeba, aby ustawić miesiąc, dzień itd. W kalendarzu, to domyślnie „teraz” ...

+0

OK mate, dzięki za wskazanie mojego błędu. –

+0

@onkar Dlaczego druga odpowiedź jest akceptowana? – Adam

+0

Hej, za tę odpowiedź. Przypuszczam, że muszę wprowadzić dzień, miesiąc, rok ręcznie, jak przypuszczam, ten daje mi bezpośrednio ... –

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); 
+0

Co ze 122? – Ilya

+0

spróbuj najpierw ... działa dobrze ... –

3

Korzystanie Java 8 można to zrobić: int n = LocalDate.now().get(ChronoField.DAY_OF_YEAR);

3

Użyj klasę w pakiecie java.time LocalDate wbudowany w Java 8 i późniejszych.

Get dzień-of-roku:

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

... i ustawić dzień-of-roku:

LocalDate localDate = LocalDate.now().withDayOfYear(195); 
Powiązane problemy