2012-09-21 21 views
9

Quiero conseguir el número de días .. es decir Ene 1 es el día 1 jan 2 es el día 2 1 de febrero es el día 32 y diciembre 31 es el día 365 o 366 dependiendo del año bisiesto o noHoy es el día del año enésimo

he utilizado todo tipo de técnicas, como date1 - date2 etc ... pero nada parece funcionar para mí, no puedo obtener la lógica correcta puede ser ... lo que quiero es contar y agregar el número de la meses que han pasado más el número de días del mes en ejecución, es decir, hoy es 21 de septiembre de 2012 es el día número (31 (enero) +29 (febrero) +31 (marzo) +30 (abril) +31 (mayo) +30 (junio) +31 (julio) +31 (aug) +20 (sept)) = 264 ° día y seguirán agregando más uno cada vez que pase el día ... gracias

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 me está dando 160, resultado no deseado

+0

para el código que está utilizando, que es la respuesta correcta june octavo 2012 es el 160º día del año –

+0

@onkar haz probado ese código. con 11,12,13,111,112,113 días .. ??? si no, entonces revísalo primero ... –

+0

Hey amigo No necesito esa parte de siffux ... primero, nd, rd ..... –

Respuesta

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

O usando Joda-API

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

Si necesita 'th' parte, sentencia switch uso

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

Acerca de su declaración 'switch': ¿Qué sucede si' dayOfYear' es por ejemplo 11 o 21? (Lo desearía: 11, 21). – Jesper

+0

Todos los números que! = 1 y! = 2 y! = 3 tendrán un final 'th'. – Ilya

+2

@Jesper Puede usar '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); 

Compruebe el resultado en su Logcat ..

3

intente configurar la fecha en el calendario para la fecha en el problema, que pidió para el 21 Sept pero se puso octava de Junio ​​en el código.

Este es el código actualizado que da lugar 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); 

Por cierto que no es necesario para ajustar el mes, el día en el calendario, etc., que por defecto es 'ahora' ...

+0

OK amigo, gracias por señalar mi error. –

+0

@onkar ¿Por qué se acepta la otra respuesta? – Adam

+0

Oye, para esta respuesta, supongo que necesito ingresar el día, mes, año manualmente, supongo, que uno me está dando directamente ... –

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

¿Qué hay de 122? – Ilya

+0

pruébelo primero ... funciona bien ... –

3

Uso de Java 8 se puede hacer esto: int n = LocalDate.now().get(ChronoField.DAY_OF_YEAR);

3

utilizar la clase LocalDate en el paquete java.time incorporado en Java 8 y versiones posteriores.

Obtener el día de año-de-:

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

... y ajustar el año el día de la:

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