2011-07-22 22 views
17

Si tengo int year, int month, int day en Java, ¿cómo puedo encontrar el nombre del día? ¿Ya hay algunas funciones para esto?Buscar el nombre del día por año, mes y día

+2

Si usted ha encontrado su respuesta que debe aceptar la respuesta que más te ayudó. – RMT

Respuesta

5

Puede usar el objeto Calendar para encontrarlo.

Una vez creada la instancia calendario que presentamos lo mejor DAY_OF_WEEK (que es un entero), entonces usted puede encontrar el día de allí)

Se puede utilizar una sentencia switch like so:

import java.util.*; 

public class DayOfWeek { 

    public static void main(String[] args) { 
     Calendar cal = Calendar.getInstance(); 
     int day = cal.get(Calendar.DAY_OF_WEEK); 
     System.out.print("Today is "); 
     switch (day) { 
      case 1: 
       System.out.print("Sunday"); 
       break; 
      case 2: 
       System.out.print("Monday"); 
       break; 
      case 3: 
       System.out.print("Tuesday"); 
       break; 
      case 4: 
       System.out.print("Wednesday"); 
       break; 
      case 5: 
       System.out.print("Thursday"); 
       break; 
      case 6: 
       System.out.print("Friday"); 
       break; 
      case 7: 
       System.out.print("Saturday"); 
     } 
     System.out.print("."); 
    } 
} 
+0

y eso le dará una int, no un nombre – Bozho

+0

que es solo en inglés. ¿Qué hay del alemán? – Bozho

+0

@Bozho, bien puedes cambiar el idioma, o puedes internacionalizarlo, por lo que seleccionará la configuración regional y la establecerá en el idioma que prefieras – RMT

8

construir una GregorianCalendar con el año, mes y día, luego consulta para encontrar el nombre del día. Algo como esto:

int year = 1977; 
int month = 2; 
int dayOfMonth = 15; 
Calendar myCalendar = new GregorianCalendar(year, month, dayOfMonth); 

int dayOfWeek = myCalendar.get(Calendar.DAY_OF_WEEK); 

Tenga en cuenta que el día de la semana se devuelve como un entero que representa el ordinal del día en la representación día de la semana de la localización. Es decir, en una localidad donde el día laborable comienza el lunes y termina el domingo, un 2 representaría el martes, mientras que si el día local comienza el domingo, ese mismo 2 representaría el lunes.

Edición

Y puesto que hay un montón de edición de respuesta pasando, me permite manejar el siguiente:

DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault()); 
String dayOfMonthStr = symbols.getWeekdays()[dayOfMonth]; 

Pensado para ser honesto, me gusta el enfoque SimpleDateFormatter mejor, porque encapsula el mismo código que he mostrado anteriormente. Tonto de olvidar todo.

+1

precaución: ¡el mes se basa en cero, será el 15 de marzo! (no febrero) –

+0

Lo sé, estaba apuntando a los idus de marzo en mi ejemplo; P – Perception

+0

tal vez, pero estoy seguro de que todavía hay programadores que no lo saben. –

9

El nombre del día de la semana difiere según el lugar. Entonces debe usar un DateFormat con la configuración regional adecuada. Por ejemplo:

SimpleDateFormat format = new SimpleDateFormat("EEEE"); 
System.out.println(format.format(date)); 

El objeto Date se puede obtener de varias maneras, incluyendo el desuso Date(..) constructor, los Calendar.set(..) métodos o joda tiempo DateTime. (Para este último se puede utilizar de joda en tiempo propio DateTimeFormat)

1
new GregorianCalendar().setTime(new Date()).get(DAY_OF_WEEK) 

Eso le da un número, Calendar.SUNDAY == 1, Calendar.MONDAY == 2, ...

1

Sí, pero es un poco largo proceso con el JDK. JodaTime puede ser una mejor opción (no lo he usado).

En primer lugar, obtiene un objeto Calendar, por lo que puede construir una fecha del día/mes/año/zona horaria. No use uno de los constructores obsoletos Date.

Luego obtenga un objeto Date de ese calendario, y páselo a SimpleDateFormat. Tenga en cuenta que los objetos de formato no son enhebrables.

// by default, this Calendar object will have the current timezone 
    Calendar cal = GregorianCalendar.getInstance(); 
    cal.set(2011, 6, 22); 

    // this formatter will have the current locale 
    SimpleDateFormat format = new SimpleDateFormat("EEEE"); 

    System.out.println(format.format(cal.getTime())); 
+0

Nota: en Calendar, los meses son basados ​​en cero. 7 es igual a agosto, no julio. – BalusC

+0

@BalusC - cierto, editado. Raramente utilizo ese método en el código principal, pero me quemo todo el tiempo en pruebas unitarias. Debería haber prestado más atención a lo que salió cuando di el ejemplo. – parsifal

12

Usted puede hacer algo como this para obtener los nombres de los días de la semana para diferentes lugares.

Aquí está la parte importante:

DateFormatSymbols dfs = new DateFormatSymbols(usersLocale); 
String weekdays[] = dfs.getWeekdays(); 

que se pueden combinar con esto:

Calendar cal = Calendar.getInstance(); 
int day = cal.get(Calendar.DAY_OF_WEEK); 

para conseguir lo que está buscando:

String nameOfDay = weekdays[day]; 
3
Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.DAY_OF_MONTH, 22); //Set Day of the Month, 1..31 
cal.set(Calendar.MONTH,6); //Set month, starts with JANUARY = 0 
cal.set(Calendar.YEAR,2011); //Set year 
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //Starts with Sunday, 6 = friday 
34

Uso SimpleDateFormat con un patrón de EEEE para obtener el nombre del día de la semana.

// Assuming that you already have this. 
int year = 2011; 
int month = 7; 
int day = 22; 

// First convert to Date. This is one of the many ways. 
String dateString = String.format("%d-%d-%d", year, month, day); 
Date date = new SimpleDateFormat("yyyy-M-d").parse(dateString); 

// Then get the day of week from the Date based on specific locale. 
String dayOfWeek = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date); 

System.out.println(dayOfWeek); // Friday 

Aquí está todo incluido en una buena clase de Java para usted.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.*; 


public class DateUtility 
{ 

    public static void main(String args[]){ 
     System.out.println(dayName("2015-03-05 00:00:00", "YYYY-MM-DD HH:MM:ss")); 
    } 

    public static String dayName(String inputDate, String format){ 
     Date date = null; 
     try { 
      date = new SimpleDateFormat(format).parse(inputDate); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return new SimpleDateFormat("EEEE", Locale.ENGLISH).format(date); 
    } 
} 
+0

+2 si pudiera ... –

+1

¡Debería ser la respuesta aceptada! No olvides 'importar java.text.ParseException; import java.text.SimpleDateFormat; import java.util. *; ' –

0

Este tipo de trabajo a tiempo la fecha es más fácil cuando se utiliza la biblioteca Joda-Time. Un simple trazador de líneas.

String dayOfWeek = new LocalDate(2014, 1, 2).dayOfWeek().getAsText(java.util.Locale.ENGLISH); 

System.out.println("dayOfWeek: " + dayOfWeek); 

Cuando se ejecuta ...

dayOfWeek: Thursday 
Cuestiones relacionadas