How to get last quarter details using java
我已经达到上一季度,如下所示:
1 2 3 4 5 6 7 |
我有
有人可以帮我这个吗?
您也可以使用自己的条件,
1 | year = (presentQuarter - 1) > 0 ? year:year-1; |
您需要有一个单独的变量来存储季度计算。我会尝试类似以下的东西。
1 2 3 | int calculatedLastQuarter = presentQuarter - 1; int lastQuarterYear = (calculatedLastQuater < 0) ? year-1 : year; int lastQuarter = (presentQuarter < 0) ? 4 : calculatedLastQuater; |
TL;博士
how I will get the last quarter's year.
1 2 3 | YearQuarter.now( ZoneId.of("Africa/Casablanca" ) ) .minusQuarters( 1 ) .getYear() |
2017
ThreeTen-Extra项目为Java 8及更高版本中内置的java.time类添加了功能。
项目的类中有
获取当前季度。
1 | YearQuarter yq = YearQuarter.now( ZoneId.of("Pacific/Auckland" ) ) ; |
调用
1 | YearQuarter yqPrevious = yq.minusQuarters( 1 ) ; |
如果需要,您可以提取年份和季度数字。最好在代码库周围传递这些YearQuarter对象,而不是仅仅使用整数,以获得类型安全性并忍受有效值。
1 2 | int year = yqPrevious.getYear() ; int q = yqPrevious.getQuarterValue() ; |
要序列化为字符串,请调用
1 |
......并解析......
1 | YearQuarter yq = YearQuarter.parse("2017-Q1" ) ; |
虽然您可以自己进行数学计算(正如其他答案已经涵盖的那样),但您可以考虑使用新的日期/时间API。
如果您使用的是Java 8,请考虑使用新的java.time API。与旧的API相比,它更容易,更少出错并且更不容易出错。
如果您使用Java <= 7,则可以使用ThreeTen Backport,这是Java 8的新日期/时间类的一个很好的后端。对于Android,还有ThreeTenABP(更多关于如何在这里使用它)。
以下代码适用于两者。
唯一的区别是包名称(在Java 8中是
代码很简单:
1 2 3 4 5 6 7 8 | // current date LocalDate now = LocalDate.now(); // get quarter int presentQuarter = now.get(IsoFields.QUARTER_OF_YEAR); // year for last quarter int year = now.minus(1, IsoFields.QUARTER_YEARS).getYear(); |
我正在使用
1 2 | // use system default timezone LocalDate now = LocalDate.now(ZoneId.systemDefault()); |
但是系统的默认时区可以改变(即使在运行时),所以通过名称显式更好:
1 2 | // current date using an explicit timezone name LocalDate now = LocalDate.now(ZoneId.of("Europe/London")); |
API使用IANA时区名称(始终采用
避免使用3个字母的缩写(如
您可以通过调用