给定一个java.util.Date对象,我如何找到它所在的Quarter?
假设Q1 = 1月2月3月,Q2 = 4月,5月,6月等
答案 0 :(得分:47)
您可以使用
int quarter = (myDate.getMonth() / 3) + 1;
请注意,尽管getMonth已被弃用:
从JDK 1.1版开始,由Calendar.get(Calendar.MONTH)取代。
答案 1 :(得分:27)
在Java 8及更高版本中,java.time类有一个更简单的版本。使用LocalDate
和IsoFields
try {
holder.spinner.setSelection((getItem(viewpos)).getSelection(),false);
} catch (Exception e) {
}
答案 2 :(得分:12)
您将不得不编写自己的代码,因为每个企业的“季度”一词都不同。你不能只做这样的事情:
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";
答案 3 :(得分:10)
由于季度是本地化(西方)概念,因此请指定区域设置而不是使用平台默认值:
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;
这将避免在非西方日历上获得第13个月(Calendar.UNDECIMBER),以及因较短月份而导致的任何偏差。
答案 4 :(得分:4)
如果你有
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);
答案 5 :(得分:3)
使用Joda时,请使用Math.ceil()函数:
double quarter = Math.ceil(new Double(jodaDate.getMonthOfYear()) / 3.0);
答案 6 :(得分:2)
确保thisMonth
至少是float或double,而不是int:
String quarter = thisMonth/3 <= 1 ? "Q1" : thisMonth/3 <= 2 ? "Q2" : thisMonth/3 <= 3 ? "Q3" : "Q4";
此致 MS
答案 7 :(得分:1)
JFreeChart有一个Quarter类。如果您很好奇,请查看javadoc。如果您想查看实施,也可以从SourceForge获取源代码。
答案 8 :(得分:1)
这里有很好的解决方案,但请记住,季度可能会因公司/行业而有所变化。有时四分之一可能是不同的3个月。
您可能希望扩展或封装日历类以将其自定义为您的任务,而不是编写一些转换它的实用程序函数。您的应用程序在该领域可能非常复杂,您可以在其中找到新日历类的其他用途 - 我保证您会很高兴扩展或封装它,即使它现在看起来很傻。
答案 9 :(得分:1)
int month = Calendar.getInstance().get( Calendar.MONTH ) + 1;
int quarter = month % 3 == 0? (month / 3): ( month / 3)+1;
答案 10 :(得分:1)
YearQuarter
.from(
LocalDate.of( 2018 , 1 , 23 )
)
Answer by abdmob是正确的:使用java.time是明智之举。
此外,ThreeTen-Extra项目使用其他类扩展了java.time。该项目是未来可能添加到java.time的试验场。
其有用的课程包括:
要获取当前季度,请指定时区。确定季度意味着确定日期。确定日期意味着指定时区。对于任何给定的时刻,日期在全球范围内因地区而异。使用continent/region
格式EST
进行指定。切勿使用3-4个字母的缩写,例如IST
或ZoneId z = ZoneId.of( "America/Montreal" );
YearQuarter yq = YearQuarter.now( z );
。
java.util.Date
java.util.Date
如果首先将Instant instant = myUtilDate.toInstant();
转换为java.time类型。 proper time zone name类代表Instant
中时间轴上的一个时刻,分辨率为UTC。
ZoneDateTime
指定时区以获得ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
。
YearQuarter
从ZonedDateTime
生成YearQuarter yq = YearQuarter.from( zdt );
。
YearQuarter
你应该传递userId
的实例,而不仅仅是数字或字符串。使用对象可提供类型安全性,确保有效值,并使您的代码更具自我文档。
答案 11 :(得分:0)
对我而言,我使用此方法进行字符串表示:
int quarter = (Calendar.getInstance().get(Calendar.MONTH) / 3); // 0 to 3
String[] mQuarterKey = {"qt1", "qt2", "qt3", "qt4"};
String strQuarter = mQuarterKey[quarter];
答案 12 :(得分:0)
使用java8你可以使用formatter:
function playPause() {
if (myVideo.paused) {
myVideo.play();
myVideo.show();
} else {
myVideo.pause();
myVideo.hide();
}
}
withQuarter:2016 3 07
答案 13 :(得分:0)
我使用这种方法。
public static Integer getQuarter(Date d){
Calendar c = Calendar.getInstance();
c.setTime(d);
int month = c.get(Calendar.MONTH);
return (month /3)+1;
}