簡體   English   中英

如何使用java獲取上一季度的詳細信息

[英]How to get last quarter details using java

我已經取得了上一季度的成績,如下所示:

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int presentQuarter = (month / 3) + 1;
int lastQuarter = (presentQuarter - 1) > 0 ? presentQuarter - 1 : 4;

我有最后一個lastQuarter ,但我將如何獲得最后一個季度的年份。

誰能幫我解決這個問題?

你也可以使用你自己的條件,

year = (presentQuarter - 1) > 0 ? year:year-1;

您需要有一個單獨的變量來存儲您的季度計算。 我會嘗試以下內容。

int calculatedLastQuarter = presentQuarter - 1;
int lastQuarterYear = (calculatedLastQuater < 0) ? year-1 : year;
int lastQuarter = (presentQuarter < 0) ? 4 : calculatedLastQuater;

tl;博士

我將如何獲得最后一個季度的年份。

YearQuarter.now( ZoneId.of( "Africa/Casablanca" ) ) 
           .minusQuarters( 1 )
           .getYear()

2017年

YearQuarter

ThreeTen-Extra項目為 Java 8 及更高版本中內置的 java.time 類添加了功能。

該項目的課程包括QuarterYearQuarter 這些季度基於 ISO 8601 日歷,運行 1 月至 3 月等。

獲取當前季度。

YearQuarter yq = YearQuarter.now( ZoneId.of( "Pacific/Auckland" ) ) ;

調用minusQuarters進行數學計算。

YearQuarter yqPrevious = yq.minusQuarters( 1 ) ;

如果需要,您可以提取年份和季度數字。 最好將這些 YearQuarter 對象傳遞給您的代碼庫,而不是僅使用 int,以獲得類型安全並承受有效值。

int year = yqPrevious.getYear() ;
int q = yqPrevious.getQuarterValue() ;

要序列化為字符串,請調用toString以遵循 ISO 8601 格式的格式生成字符串:yyyy-Qq(盡管該標准實際上並不涉及季度)。

String output = yq.toString() ;

…和解析…

YearQuarter yq = YearQuarter.parse( "2017-Q1" ) ;

雖然您可以自己計算(因為其他答案已經涵蓋),但您可以考慮使用新的日期/時間 API。

如果您使用的是Java 8 ,請考慮使用新的 java.time API 與舊 API 相比,它更容易、錯誤更少且更不容易出錯

如果您使用的是Java <= 7 ,則可以使用ThreeTen Backport ,這是 Java 8 的新日期/時間類的一個很好的反向端口。 對於Android ,有ThreeTenABP (更多關於如何使用它的信息)。

下面的代碼適用於兩者。 唯一的區別是包名稱(在 Java 8 中是java.time ,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是org.threeten.bp ),但類和方法名稱是相同的。

代碼很簡單:

// 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();

LocalDatejava.timeorg.threeten.bp包中, IsoFieldsjava.time.temporalorg.threeten.bp.temporal中(取決於您使用的是 Java 8 還是 ThreeTen Backport)。


我正在使用LocalDate.now() ,它使用系統的默認時區獲取當前日期,但最好始終明確您正在使用的時區(即使您使用默認時區):

// use system default timezone
LocalDate now = LocalDate.now(ZoneId.systemDefault());

但是系統的默認時區可以改變(即使在運行時),所以最好通過名稱明確一個:

// current date using an explicit timezone name
LocalDate now = LocalDate.now(ZoneId.of("Europe/London"));

API 使用IANA 時區名稱(始終采用Continent/City格式,例如America/Sao_PauloEurope/Berlin )。 避免使用 3 個字母的縮寫(如CSTPST ),因為它們不明確且不標准

您可以通過調用ZoneId.getAvailableZoneIds()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM