我正在编写代码,我需要使用Clock类来获取当前时间。我想用2个月减去当前日期。
这是代码:
public class DemoApp {
private Clock clock = Clock.systemDefaultZone();
public List<String> subtractMonths(String[][] str) {
List<String> ids = new ArrayList<>();
// The code
return ids;
}
}
在main类中,我有这个字符串数组:
private static final String[][] str = {
{"id1", "2017-11-01T14:10:30"},
{"id2", "2018-01-20T18:01:34"},
{"id3", "2018-01-22T08:45:22"},
{"id4", "2018-02-18T12:42:37"},
{"id5", "2019-03-16T03:56:32"},
};
在main类中,我将使用str参数调用subtractMonths
方法,如果日期不是当前月份和前一个月,则返回id。例如,如果当前月份为1月,则返回id为12月之前的月份。任何反馈都将不胜感激!
我认为这样的事情是有意的:
public List<String> subtractMonths(String[][] str) {
YearMonth lastMonth = YearMonth.now(clock).minusMonths(1);
List<String> ids = Arrays.stream(str)
.filter(pair -> YearMonth.parse(pair[1], DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.isBefore(lastMonth))
.map(pair -> pair[0])
.collect(Collectors.toList());
return ids;
}
当我今天调用这个方法并将您的str
作为参数传递时,我会得到这个结果:
[id1,id2,id3,id4]
是的,除了给定的Clock
实例之外,我还使用YearMonth
和DateTimeFormatter
类。但是,YearMonth
从时钟获取时间。这反过来又保证了他们在要求你使用时钟时的行为。它们可以替代另一个时钟,代码将专门使用该时钟来确定我们所处的月份。
这对于可测试性来说非常好,也是一个经常使用的技巧。当你替换一个总是告诉你现在是2019年1月的时钟时,你就知道会出现什么样的结果。然后,你可以在2025年重新运行自动测试,并且仍然期望得到相同的结果。如果你没有得到,就报告失败,如果你得到了,就晚上睡个好觉。
链接:使用Java8个日期/时间类编写和测试方便方法
我认为这不可能是简单的方法。时钟中对时钟日期执行加减运算的唯一方法是
static Clock offset(Clock baseClock, Duration offsetDuration)
持续时间没有月,因为持续时间与位置和时间时刻无关。
然而,一个月的长度完全取决于此(在二月添加一个月比在一月添加一个月要短。同样,在闰年或夏令时添加一个月会有所不同)。
目前还没有简单的方法将一个月添加到特定日期。这是dart 2.0核心库的重大变化之一。
同时,最安全的方法是使用传入的所有参数构建一个新的DateTime,但在月份中添加1:new DateTime(other.year,other.month 1,other.day,other.hour,…)。
尽管如此,你仍然需要注意:在3月31日的基础上增加一个月意味着什么?使用上面的简单方法,你将在5月1日结束。如果这不是你想要的,你就得把这几个月的时间压缩。这需要更多的代码(包括知道什么时候有闰年)。
参考链接:https://github.com/flutter/flutter/issues/12141
使用LocalDateTime
或Instant
可以使用减号()
和加号()
来减去或增加时间量:
LocalDateTime beforeTwoMonths = LocalDateTime.now()
.minus(2, ChronoUnit.MONTHS);
或者使用minusMonths()
方法:
LocalDateTime beforeTwoMonths = LocalDateTime.now().minusMonths(2);
只使用时钟
类是不可能的。唯一的方法是将其转换为ZonedDateTime
并减去月份:
ZonedDateTime beforeTwoMonths = Clock.systemDefaultZone().instant().atZone(ZoneId.systemDefault()).minusMonths(2);
否则你可以自己计算,但我不认为这是最好的方法。
问题内容: 我想从Java中的当前日期减去n天。 我怎么做? 问题答案: 您不必使用日历。您可以只使用时间戳记: 更新 不要忘记在1000年底之前长时间添加“ l”。 请考虑以下警告: 在java秒,夏令时等情况下,将毫秒添加到Java日期中将使原始日期增加零天或两天。如果您需要100%确定仅添加一天,则此解决方案不可用。
问题内容: 有人可以告诉我如何从当前日期减去45天吗? 谢谢 问题答案: 您可以使用Calendar类:
我该怎么做?
本文向大家介绍使用Java中的Calendar.DATE从当前日期减去天数,包括了使用Java中的Calendar.DATE从当前日期减去天数的使用技巧和注意事项,需要的朋友参考一下 为Java中的Calendar类导入以下软件包。 首先,创建一个Calendar对象并显示当前日期。 现在,让我们使用方法和Calendar.DATE常数减去天数。由于我们在递减,因此请在此处设置一个负值。 示例 输
问题内容: 我的心脏必须深入到减去两个日期以计算出天数后,内部开始流血: .NET或你命名的任何现代语言中只有两行代码。 这对Java不好吗?还是我应该知道一个隐藏的方法? 可以在util中使用Date类而不使用GregorianCalendar吗?如果是这样,我是否应该提防像1970年这样的细微事情? 谢谢 问题答案: 这确实是标准Java API中最大的史诗失败之一。有一点耐心,那么你将获得J
我可以打印当前日期如何使用date对象从当前日期减去2天。无论之前在这个网站上问了什么问题,都不符合我的要求。如果我使用日历,那么我会得到不同格式的日期。我只希望使用date对象以yyyyMMdd格式显示日期。我尝试了这个方法,但我遇到了错误,就像运算符一样——参数类型字符串int未定义。请帮助我解决这个问题。