博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java打印日期序列_关于日期:如何使用java获取上一季度的详细信息
阅读量:6973 次
发布时间:2019-06-27

本文共 2588 字,大约阅读时间需要 8 分钟。

我已经达到上一季度,如下所示:

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,但我将如何获得最后一个季度。

有人可以帮我这个吗?

仅供参考,您正在使用现在遗留下来的麻烦的旧类,取而代之的是java.time类。

@BasilBourque你认为那些遗留类给了我错误的价值观

这不是错误值的情况,但是使用遗留对新API有多困难,这使得事情变得更加容易(当然,自己做数学而不是让API为你做的更多) 容易出错)。 更不用说旧API的众多众所周知的问题和设计问题。

您也可以使用自己的条件,

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;博士

how I will get the last quarter's year.

YearQuarter.now( ZoneId.of("Africa/Casablanca" ) )

.minusQuarters( 1 )

.getYear()

2017

YearQuarter

ThreeTen-Extra项目为Java 8及更高版本中内置的java.time类添加了功能。

项目的类中有Quarter和YearQuarter。这些季度基于ISO 8601日历,运行1月至3月等。

获取当前季度。

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

调用minusQuarters进行数学运算。

YearQuarter yqPrevious = yq.minusQuarters( 1 ) ;

如果需要,您可以提取年份和季度数字。最好在代码库周围传递这些YearQuarter对象,而不是仅仅使用整数,以获得类型安全性并忍受有效值。

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

LocalDate位于java.time或org.threeten.bp包中,IsoFields位于java.time.temporal或org.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_Paulo或Europe/Berlin)。

避免使用3个字母的缩写(如CST或PST),因为它们不明确且不标准。

您可以通过调用ZoneId.getAvailableZoneIds()获取可用时区列表(并选择最适合您系统的时区)。

转载地址:http://qhhsl.baihongyu.com/

你可能感兴趣的文章
LINUX学习(LINUX就该这么学)2
查看>>
PostgreSQL系列产品云生态、产品指南、企业全栈应用案例、开发管理实践
查看>>
linux内核启动_学习笔记
查看>>
linux下samba共享中文乱码解决办法
查看>>
HSRP热备份
查看>>
pfSense通过别名限制迅雷下载
查看>>
软件自动化测试资源列表
查看>>
数字签名与数字证书技术简介
查看>>
[LNMP]Nginx解析php与代理
查看>>
GridView动态添加新行
查看>>
使用Kazoo去增删改查zookeeper
查看>>
C# 实现系统关机、注销、重启、休眠、挂起
查看>>
SQL server 2000常用字符串长度总结
查看>>
征服Perl——哈希——里程碑M7
查看>>
遇到女神应该使用什么样的暗恋思维
查看>>
HA(heartbeat)主备模式实现lvs群集的高可用性
查看>>
mtr路由监控
查看>>
容器编排 Docker Compose
查看>>
KVM 使用virtio驱动Windows server 虚拟机
查看>>
我的Oracle 9i学习日志(15)-- 表的管理
查看>>