Java/Android中时间类功能的替换和DateTime类的理解

Java/Android中时间类功能的替换和DateTime类的理解,java,android,date,datetime,time,Java,Android,Date,Datetime,Time,我正在开发一个Android应用程序,它大量使用类来进行时间/日期转换和计算 现在这个类被弃用了,我要求将使用它的所有助手方法替换为其他方法 我对Date/Time类的工作原理有很多误解,每个类在处理时间的方式上都有很大的不同 同时,it本身也有很多复杂性: Unix时间戳(从1970年1月1日起的秒数,32位格式) UTC:是时间标准,它比GMT00精确 格林威治时间:是格林威治时间,我们可以根据它计算时区 等等 我对Time/Date类如何基于时间和日期的大范围差异来操纵时间和日期有很多

我正在开发一个Android应用程序,它大量使用类来进行时间/日期转换和计算

现在这个类被弃用了,我要求将使用它的所有助手方法替换为其他方法

我对Date/Time类的工作原理有很多误解,每个类在处理时间的方式上都有很大的不同

同时,it本身也有很多复杂性:

  • Unix时间戳(从1970年1月1日起的秒数,32位格式)

  • UTC:是时间标准,它比GMT00精确

  • 格林威治时间:是格林威治时间,我们可以根据它计算时区

等等

我对Time/Date类如何基于时间和日期的大范围差异来操纵时间和日期有很多误解

例如:

这种代码的和平:

Time dayTime = new Time();
dayTime.setToNow();     
// we start at the day returned by local time. Otherwise this is a mess.
int julianStartDay = Time.getJulianDay(System.currentTimeMillis(), dayTime.gmtoff);
我该怎么替换它呢?它的好处是什么

白昼.gmtoff

此外,我是否应该使用:

  • 格雷戈里安卡伦达类

  • SimpleDataFormat类

  • 日历类

  • 还有别的

    • 这不是一个可靠的答案,但我在为Android应用程序解析MySql中的日期时使用了以下代码。我还发现Java Date类令人困惑,因为它大多数都不推荐使用,但我发现该类可以满足我的大多数需求

      一件好事是
      new gregorianalendar()将实例化到当前时间。您可以使用另一个构造函数来指定特定的时区

       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format
       GregorianCalendar calendar = new GregorianCalendar();
       calendar.setTime(date);
       System.out.println(calendar.getTime());
       int month = calendar.get(Calendar.MONTH);
       System.out.println(month);
      
      乔达时间 是的,日期-时间工作通常令人惊讶地困惑和棘手

      是的,您应该使用您列出的类以外的其他类。与早期版本的Java捆绑在一起的旧日期时间类非常混乱。他们是业界勇敢地承担这一难题的第一批人。但最终他们失败了,证明在设计和实现上都存在缺陷。我指的是java.util.Date/.Calendar、java.text.SimpleDateFormat以及它们的兄弟姐妹。避开它们

      甚至Sun和Oracle也放弃了这些旧类,同意用java 8及更高版本中内置的新java.time框架取代它们。这个新框架的灵感来自Joda Time的成功

      不要使用旧类,而是将库添加到Android项目中

      我记得有一些Joda Time的替代包装专门为Android提供,以解决Android中关于缓慢加载的一些限制。我会在部署时对此进行研究,但要开始使用,您可以使用常规的Joda Time jar

      我不会在这里显示任何示例代码,因为您可以通过搜索StackOverflow找到数百个示例

      java.sql 对于数据库工作,请使用java.sql包中的类:java.sql.Timestamp、.Time和.Date类

      有朝一日,JDBC驱动程序将被更新,以直接使用新的java.time类型。但是直到那一天,在Java8和更高版本中使用为那些旧类添加的新转换方法

      sql类仅用于从数据库中获取数据。对于编码的所有其他方面,请使用java.time类

      时区 至于时区,你的文章并不十分清楚你的困惑的确切性质

      所有日期-时间处理都是从内部作为计数完成的。旧类和java.time都使用了1970年第一个时刻的纪元。旧类以毫秒计;时间以纳秒计

      对于UTC和,出于商业应用程序的实际目的,它们是相同的。如果你真的想知道,请阅读维基百科。但在常规Java工作中,您可以将它们视为同义词

      所有其他时区都被定义为/GMT。我们需要地球上的一些任意点来定义为分界线,即参考点。出于历史原因,位于英国伦敦格林威治的皇家天文台成为了这一点。中的时钟设置为比该时间提前五个半小时,而中的时钟设置为比该时间晚五(或四)小时

      时间是时间线上的一个时刻,总是以UTC为单位,基本上只是历元的一个计数。你可以把时间看作是一个瞬间加上一个时区,一个
      ZoneId
      。如果我们通过调用
      Instant.now
      来获取当前时刻,并通过应用加尔各答、巴黎和蒙特勒尔的时区来调整当前时刻,我们将得到三个
      ZoneDateTime
      对象。所有三个都代表相同的同时时刻,并且每个都包含来自内部的相同计数。它们的不同之处在于它们显示出不同的颜色

      请记住,时区是UTC偏移量和处理异常(如夏令时(DST))的规则集合的组合。这些规则包括过去、现在和未来的调整,这些调整需要在UTC补偿调整之外进行。除DST外,其他调整包括,例如,在第二次世界大战期间,欧洲各地改变了各种计时做法