给定一个 java.util.Date 对象,我该如何找到它所在的 Quarter?
假设 Q1 = 1 月 2 月 3 月,Q2 = 4 月、5 月、6 月等。
从 Java 8 开始,可以使用java.time包中的类作为字段访问季度。
import java.time.LocalDate;
import java.time.temporal.IsoFields;
LocalDate myLocal = LocalDate.now();
quarter = myLocal.get(IsoFields.QUARTER_OF_YEAR);
在旧版本的 Java 中,您可以使用:
import java.util.Date;
Date myDate = new Date();
int quarter = (myDate.getMonth() / 3) + 1;
请注意,尽管getMonth很早就被弃用了:
从 JDK 1.1 版开始,由 Calendar.get(Calendar.MONTH) 取代。
相反,您可以使用这样的Calendar
对象:
import java.util.Calendar;
import java.util.GregorianCalendar;
Calendar myCal = new GregorianCalendar();
int quarter = (myCal.get(Calendar.MONTH) / 3) + 1;
您将不得不编写自己的代码,因为每个企业的“季度”一词都不同。你不能做类似的事情:
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";
由于宿舍是一个本地化(西方)概念,请指定一个 Locale 而不是使用平台默认值:
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;
这将避免在非西方日历上获得第十三个月(Calendar.UNDECIMBER),以及由于其较短的月份而导致的任何偏差。
如果你有
private static final int[] quarters = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};
那么电流quarter
是
private static final int thisQuarter = quarters[thisMonth];
thisMonth
在哪里
private static final int thisMonth = cal.get(Calendar.MONTH);
使用 Joda 时间时,使用 Math.ceil() 函数:
double quarter = Math.ceil(new Double(jodaDate.getMonthOfYear()) / 3.0);
JFreeChart 有一个 Quarter 类。如果您好奇,请查看javadoc。如果您想查看实现,也可以从SourceForge获得源代码。
这里有很好的解决方案,但请记住,季度也可能因公司/行业而异。有时一个季度可能是不同的 3 个月。
您可能希望扩展或封装日历类以将其自定义为您的任务,而不是编写一些转换它的实用程序函数。您的应用程序在该领域可能已经足够复杂,以至于您会发现新日历类的其他用途——我保证您会很高兴您扩展或封装它,即使现在看起来很傻。
int month = Calendar.getInstance().get( Calendar.MONTH ) + 1;
int quarter = month % 3 == 0? (month / 3): ( month / 3)+1;
确保thisMonth
至少是浮点数或双精度数,而不是整数:
String quarter = thisMonth/3 <= 1 ? "Q1" : thisMonth/3 <= 2 ? "Q2" : thisMonth/3 <= 3 ? "Q3" : "Q4";
问候,女士
对我来说,我使用这种方法来表示字符串:
int quarter = (Calendar.getInstance().get(Calendar.MONTH) / 3); // 0 to 3
String[] mQuarterKey = {"qt1", "qt2", "qt3", "qt4"};
String strQuarter = mQuarterKey[quarter];
使用 java8 你可以使用格式化程序:
import java.time.format.DateTimeFormatter
import java.time.LocalDate
println("withQuarter: " + LocalDate.of("2016".toInt,"07".toInt,1).format(DateTimeFormatter.ofPattern("yyyyQMM")))
与季度:2016 3 07
我使用这种方法。
public static Integer getQuarter(Date d){
Calendar c = Calendar.getInstance();
c.setTime(d);
int month = c.get(Calendar.MONTH);
return (month /3)+1;
}