java - 如何从时间戳对象中获取日期?
问题描述
我在数据库 2019-07-03 12:14:11 中以这种格式存储日期,所以当我从数据库中获取它时,它带有时间戳,但我只想要日期,以便我可以将它用作我的键TreeMap 根据日期对 TreeMap 进行排序。
例如。
假设我在数据库中有与这些日期相关的数据
2019-07-03 12:14:11 and
2019-07-03 12:14:27
现在两个日期都相同,但时间不同,所以当我存储在 TreeMap 对象中时
TreeMap<Date,List<Integer>> t=new TreeMap<>();
然后尽管日期相同但时间不同,TreeMap 将日期存储在不同的键中,但我想要两个日期相同,因此与两个日期关联的数据应仅存储在一个键中。
如果与第一个 adte 关联的数据是 1 并且第二个日期是 2 在 TreeMap 它应该存储在一个键下 1 和 2 在 List 中,如果另一个数据 3 与 2019-07-01 12:12:12 相关联,那么它应该存储在另一个键中,键应该排序
我写了这个
if(map.containsKey(invoiceHeader.getInvoice_Date()))
{
List<Integer> invoicesList= map.get(invoiceHeader.getInvoice_Date());
invoicesList.add(invoiceId);
map.put(invoiceHeader.getInvoice_Date(),invoicesList);
}
else {
List<Integer> invoicesList=new ArrayList<>();
invoicesList.add(invoiceId);
map.put(invoiceHeader.getInvoice_Date(),invoicesList);
}
但这里的关键是存储日期和时间,所以即使
2019-07-03 12:14:11 and
2019-07-03 12:14:27
相同的 2 个键被创建,1 个存储在一个键中,2 个存储在另一个键中,因为 getInvoice_Date() 正在获取存储在数据库中的日期和时间
如何实现我想要的?
解决方案
不要使用古代java.util.Date
物品。2019-07-03 12:14:11
使用新的 Java 8 Time API,即将日期字符串解析为LocalDateTime
对象,然后调用toLocalDate()
以获取仅限日期的LocalDate
值,该值将成为地图 ( Map<LocalDate, List<Integer>>
) 中的键。
您的代码将是:
map.computeIfAbsent(invoiceHeader.getInvoice_Date().toLocalDate(), x -> new ArrayList<>())
.add(invoiceId);
如果getInvoice_Date()
返回 a java.util.Date
,那么您可以获得如下LocalDate
值:
Instant invoiceInstant = invoiceHeader.getInvoice_Date().toInstant();
LocalDateTime invoiceDateTime = LocalDateTime.ofInstant(invoiceInstant, ZoneId.systemDefault());
LocalDate invoiceDate = invoiceDateTime.toLocalDate();
结合上面的代码给你:
map.computeIfAbsent(LocalDateTime.ofInstant(invoiceHeader.getInvoice_Date().toInstant(),
ZoneId.systemDefault()).toLocalDate(),
x -> new ArrayList<>())
.add(invoiceId);
推荐阅读
- java - Selenide 有时不填写表单输入
- microsoft-graph-api - 获取共享驱动器邮箱的驱动器时出现 403 禁止错误
- python - 计算元组中的频率
- apache - Wamp 密码保护不起作用 - 禁止错误
- html - Azure AD B2C 自定义策略社交按钮顺序
- node.js - socket.io v.4 加入时如何获取已在房间中的套接字列表
- php - 在特定页面中加载自定义主题/在 wordpress 插件 (PHP) 中发布
- java - 嵌套异常是 io.lettuce.core.RedisException: java.io.IOException: An现有连接被远程主机强行关闭
- c# - 当用户没有自己的邮箱时,我们如何通过 EWS 访问交换邮箱?
- flutter - Flutter:如何仅使用主屏幕中的按钮导航到第二个导航屏幕(底部导航)?