example definicion java datetime calendar

definicion - java graphics 2d



¿Número de días en un mes particular de un año en particular? (14)

¿Cómo saber cuántos días tiene un mes particular de un año en particular?

String date = "2010-01-19"; String[] ymd = date.split("-"); int year = Integer.parseInt(ymd[0]); int month = Integer.parseInt(ymd[1]); int day = Integer.parseInt(ymd[2]); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR,year); calendar.set(Calendar.MONTH,month); int daysQty = calendar.getDaysNumber(); // Something like this


java.time.LocalDate

Desde Java 1.8, puede usar el método lengthOfMonth en java.time.LocalDate :

LocalDate date = LocalDate.of(2010, 1, 19); int days = date.lengthOfMonth();


Código para java.util.Calendar

Si tiene que usar java.util.Calendar , sospecho que quiere:

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

Código para Joda Time

Personalmente, sin embargo, sugiero usar Joda Time en lugar de java.util.{Calendar, Date} para empezar, en cuyo caso podría usar:

int days = chronology.dayOfMonth().getMaximumValue(date);

Tenga en cuenta que en lugar de analizar los valores de cadena individualmente, sería mejor obtener la API de fecha / hora que esté usando para analizarla. En java.util.* Puede usar SimpleDateFormat ; en Joda Time usarías un DateTimeFormatter .


Cree un calendario, configure año y mes y use getActualMaximum

int iYear = 1999; int iMonth = Calendar.FEBRUARY; // 1 (months begin with 0) int iDay = 1; // Create a calendar object and set year and month Calendar mycal = new GregorianCalendar(iYear, iMonth, iDay); // Get the number of days in that month int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28

Prueba : prueba un mes en un año bisiesto:

mycal = new GregorianCalendar(2000, Calendar.FEBRUARY, 1); daysInMonth= mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 29

EDIT: Solución para JAVA 8

@ Warren M. Nocos. Si está intentando usar la nueva API de fecha y hora de Java 8, puede usar la clase java.time.YearMonth .

// Get the number of days in that month YearMonth yearMonthObject = YearMonth.of(1999, 2); int daysInMonth = yearMonthObject.lengthOfMonth(); //28

Prueba: prueba un mes en un año bisiesto:

yearMonthObject = YearMonth.of(2000, 2); daysInMonth = yearMonthObject.lengthOfMonth(); //29


El siguiente método le proporcionará el no de días en un mes en particular

public static int getNoOfDaysInAMonth(String date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return (cal.getActualMaximum(Calendar.DATE)); }


En Java8 puede usar get ValueRange desde un campo de una fecha.

LocalDateTime dateTime = LocalDateTime.now(); ChronoField chronoField = ChronoField.MONTH_OF_YEAR; long max = dateTime.range(chronoField).getMaximum();

Esto le permite parametrizar en el campo.


Esta es la forma matemática:

Por año, mes (1 a 12):

int daysInMonth = month == 2 ? 28 + (year % 4 == 0 ? 1:0) - (year % 100 == 0 ? (year % 400 == 0 ? 0 : 1) : 0) : 31 - (month-1) % 7 % 2;


Esto funcionó bien para mi.

Esta es una muestra de salida

import java.util.*; public class DaysInMonth{ public static void main(String args []){ Scanner input = new Scanner(System.in); System.out.print("Enter a year:"); int year = input.nextInt(); //Moved here to get input after the question is asked System.out.print("Enter a month:"); int month = input.nextInt(); //Moved here to get input after the question is asked int days = 0; //changed so that it just initializes the variable to zero boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0); switch (month){ case 1: days = 31; break; case 2: if (isLeapYear) days = 29; else days = 28; break; case 3: days = 31; break; case 4: days = 30; break; case 5: days = 31; break; case 6: days = 30; break; case 7: days = 31; break; case 8: days = 31; break; case 9: days = 30; break; case 10: days = 31; break; case 11: days = 30; break; case 12: days = 31; break; default: String response = "Have a Look at what you''ve done and try again"; System.out.println(response); System.exit(0); } String response = "There are " +days+ " Days in Month "+month+ " of Year " +year+ "./n"; System.out.println(response); // new line to show the result to the screen. } } //[email protected]


Puede usar el método Calendar.getActualMaximum :

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month); int numDays = calendar.getActualMaximum(Calendar.DATE);


Puede usar el método Calendar.getActualMaximum:

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month-1); int numDays = calendar.getActualMaximum(Calendar.DATE);

Y el mes-1 es debido a que el mes toma su número original de mes mientras que en el método toma el argumento siguiente en Calendar.class

public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }

Y el (campo int) es como el siguiente.

public static final int JANUARY = 0; public static final int NOVEMBER = 10; public static final int DECEMBER = 11;


Se debe evitar el uso de la API de Calendar obsoleta.

En Java8 o una versión superior, esto se puede hacer con YearMonth .

Código de ejemplo:

int year = 2011; int month = 2; YearMonth yearMonth = YearMonth.of(year, month); int lengthOfMonth = yearMonth.lengthOfMonth(); System.out.println(lengthOfMonth);


String date = "11-02-2000"; String[] input = date.split("-"); int day = Integer.valueOf(input[0]); int month = Integer.valueOf(input[1]); int year = Integer.valueOf(input[2]); Calendar cal=Calendar.getInstance(); cal.set(Calendar.YEAR,year); cal.set(Calendar.MONTH,month-1); cal.set(Calendar.DATE, day); //since month number starts from 0 (i.e jan 0, feb 1), //we are subtracting original month by 1 int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println(days);


if (month == 4 || month == 6 || month == 9 || month == 11) daysInMonth = 30; else if (month == 2) daysInMonth = (leapYear) ? 29 : 28; else daysInMonth = 31;


import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /* * 44. Return the number of days in a month * , where month and year are given as input. */ public class ex44 { public static void dateReturn(int m,int y) { int m1=m; int y1=y; String str=" "+ m1+"-"+y1; System.out.println(str); SimpleDateFormat sd=new SimpleDateFormat("MM-yyyy"); try { Date d=sd.parse(str); System.out.println(d); Calendar c=Calendar.getInstance(); c.setTime(d); System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH)); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { dateReturn(2,2012); } }


public class Main { private static LocalDate local=LocalDate.now(); public static void main(String[] args) { int month=local.lengthOfMonth(); System.out.println(month); } }