ventas una trimestres trimestre sumar promedio por formatos formato fechas fecha entre calcular aaaa java calendar

java - una - promedio de ventas por trimestre



¿Cómo descubro el trimestre de una fecha determinada? (13)

Buenas soluciones aquí, pero recuerde que los trimestres pueden estar sujetos a cambios dependiendo de la compañía / industria también. A veces un trimestre puede ser un 3 meses diferentes.

Probablemente desee extender o encapsular la clase de calendario para personalizarla a sus tareas en lugar de escribir alguna función de utilidad que la convierta. Su aplicación probablemente sea lo suficientemente compleja en esa área que encontrará otros usos para su nueva clase de calendario. Prometo que se alegrará de haberla extendido o encapsulado, aunque parezca tonto ahora.

Dado un objeto java.util.Date, ¿cómo hago para encontrar en qué cuarto se encuentra?

Asumiendo Q1 = Ene Feb Mar, Q2 = Abr, May, Jun, etc.


Como los trimestres son un concepto localizado (occidental), especifique una configuración regional en lugar de usar la configuración predeterminada de la plataforma:

Calendar cal = Calendar.getInstance(Locale.US); /* Consider whether you need to set the calendar''s timezone. */ cal.setTime(date); int month = cal.get(Calendar.MONTH); /* 0 through 11 */ int quarter = (month / 3) + 1;

Esto evitará obtener el decimotercer mes (calendario.UNDECIMBER) en calendarios no occidentales, y cualquier desviación causada por sus meses más cortos.


JFreeChart tiene una clase Quarter. Si tienes curiosidad, echa un vistazo al javadoc . La fuente también está disponible en SourceForge si desea verificar la implementación.


Podrías usar

int quarter = (myDate.getMonth() / 3) + 1;

Tenga cuidado , aunque getMonth está en desuso:

A partir de la versión 1.1 de JDK, reemplazado por Calendar.get (Calendar.MONTH).


Tendrá que escribir su propio código porque el término "Trimestre" es diferente para cada empresa. ¿No puedes hacer algo como esto?

Calendar c = /* get from somewhere */ int month = c.get(Calendar.MONTH); return (month >= Calendar.JANUARY && month <= Calendar.MARCH) ? "Q1" : (month >= Calendar.APRIL && month <= Calendar.JUNE) ? "Q2" : (month >= Calendar.JULY && month <= Calendar.SEPTEMBER) ? "Q3" : "Q4";


Si usted tiene

private static final int[] quarters = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};

Entonces el quarter actual es

private static final int thisQuarter = quarters[thisMonth];

Donde este thisMonth es

private static final int thisMonth = cal.get(Calendar.MONTH);


int month = Calendar.getInstance().get( Calendar.MONTH ) + 1; int quarter = month % 3 == 0? (month / 3): ( month / 3)+1;


Para mí, utilicé este método para la representación de cadenas:

int quarter = (Calendar.getInstance().get(Calendar.MONTH) / 3); // 0 to 3 String[] mQuarterKey = {"qt1", "qt2", "qt3", "qt4"}; String strQuarter = mQuarterKey[quarter];


Al usar el tiempo Joda, use la función Math.ceil ():

double quarter = Math.ceil(new Double(jodaDate.getMonthOfYear()) / 3.0);



con java8 puedes usar el formateador:

import java.time.format.DateTimeFormatter import java.time.LocalDate println("withQuarter: " + LocalDate.of("2016".toInt,"07".toInt,1).format(DateTimeFormatter.ofPattern("yyyyQMM")))

con trimestre: 2016 3 07


La respuesta de abdmob es correcta: el uso de java.time es el camino más inteligente.

ThreeTen-Extra

Además, el proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time.

Sus clases útiles incluyen:

Trimestre actual

Para obtener el trimestre actual, especifique un huso horario. Determinar un trimestre significa determinar una fecha. Y determinar una fecha significa especificar una zona horaria. Para cualquier momento dado, la fecha varía alrededor del mundo por zona. Especifique utilizando un nombre de zona horaria adecuado en forma de continent/region . Nunca use las abreviaturas de 3-4 letras como EST o IST .

ZoneId z = ZoneId.of( "America/Montreal" ); YearQuarter yq = YearQuarter.now( z );

Dado un java.util.Date

Si se le da un java.util.Date primero conviértalo a un tipo java.time. La clase Instant representa un momento en la línea de tiempo en UTC con una resolución de nanosegundos .

Instant instant = myUtilDate.toInstant();

Asigna un huso horario para obtener un ZoneDateTime .

ZoneId z = ZoneId.of( "America/Montreal" ); ZonedDateTime zdt = instant.atZone( z );

Genera un YearQuarter partir de ese ZonedDateTime .

YearQuarter yq = YearQuarter.from( zdt );

Use a lo largo de su código

Debería pasar ejemplos de YearQuarter lugar de meros números o cadenas. El uso de objetos proporciona seguridad de tipo, garantiza valores válidos y hace que su código sea más autodocumentado.


Asegúrese de que thisMonth sea ​​al menos un float o un double, no un int:

String quarter = thisMonth/3 <= 1 ? "Q1" : thisMonth/3 <= 2 ? "Q2" : thisMonth/3 <= 3 ? "Q3" : "Q4";

Saludos, MS