我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我有一个java.util.Date对象或一个java.util.Calendar对象.如何在java.time框架中将其转换为正确的类型?
我听说我们现在应该使用java.time类型来处理大部分业务逻辑.使用尚未针对java.time更新的旧代码时,我需要能够来回转换.什么类型映射到java.util.Date或java.util.Calendar?
我已经阅读了关于日期操作的所有其他Q/A,但它们似乎都没有给我满意的答案.
我有一个地理位置不同的用户项目,它Date在一些类和数据中使用.问题是我正在寻找一种有效的方法来操纵各自时区中不同用户的日期,大多数答案建议使用Joda库进行Date操作,这还不太明白,因为我还没有找到任何操作你不能用传统的Java做,所以如果有人可以解释我用Joda做什么不能用传统的Java做,那么我可以考虑使用它.
我终于开始使用System.currentTimeMillis()将日期保存到数据库(任何数据库)的方法.这样可以避免让我担心使用数据库存储日期的时区.如果我想查询数据库中的特定日期或日期范围,我会使用我想要查询的long值Date来执行查询:
SELECT * FROM table1 WHERE date1>=1476653369000
Run Code Online (Sandbox Code Playgroud)
然后,在检索时,ResultSet我会使用请求数据的用户的时区long将从数据库检索到的值格式化为可读Date.
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(resultSet.getLong(1));
cal.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
Date myDate = cal.getTime();
Run Code Online (Sandbox Code Playgroud)
根据我读过的一些观点,有些人强调说存储System.currentTimeMillis()肯定不是最好的做法,然而,由于某种原因,他们都错过了说为什么它不值得推荐.我错过了什么吗?这会导致转换的性能问题Long->Date/ Date->Long?有没有使用时无法实现任何使用情况下Long,而不是Date在数据库?有人可以发布关于此的理由解释吗?
另一方面,假设我继续使用Date值来存储数据库中的日期,有没有办法避免在处理数据库时担心时区Date?
提前致谢.
我有以下问题.我有一个每5分钟运行一次的石英作业,并通过Web服务调用检索一个大对象.此应用程序的目的是它将遍历对象中的List并从多个类别中捕获计数.
一个具体要求是每个类别被分配一个任意窗口,比如说上午9点到12点.如果我们在该窗口中,则计数会从先前的作业继续添加到滚动计数中,否则将被忽略.
问题.我正在加载可配置的开始时间(格式为美国东部时间上午9:00)和一个文件的int持续时间(以分钟为单位,即180).properties.
问题是处理这个问题的最佳方法是什么.现在我只是将可配置的开始时间转换为long我的业务类实例化的时间.我Calendar用来计算long结束时间的值.由于这些都是在1970年代,当我想知道现在是否在这两次之间时,它需要我的一些肮脏.我采用当前new Date()格式,删除年份,Formatter再次使用parse()1970年的日期然后我可以long与我的开始和结束时间进行简单的比较.
我知道必须采用一种不那么难看的方法来解决这个问题.有什么想法吗?