代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

从Java日历迁移到Joda日期时间

  •  10
  • Cheok Yan Cheng  · 技术社区  · 14 年前

    以前,当我第一次设计股票应用程序相关软件时,我决定使用 java.util.Date 表示股票的日期/时间信息。

    日期类型 已弃用。因此,很快,我将重构所有代码以利用 java.util.Calendar

    1. 构造 java.util.Calendar日历 日期类型
    2. Stock 类,我需要克隆一个副本,作为 Calendar

    这是当前的源代码 Stock.java

    最近,我发现 Joda-Time . 我通过创建1000000来执行以下基准测试 , java.util.Calendar日历 org.joda.time.DateTime . 我发现 org.joda.time.DateTime日期时间 java.util.Calendar日历 ,在实例化期间。

    以下是基准测试 alt text

    这个实例化速度是很重要的,特别是许多股票的实例将被创建,以代表一个股票的长期价格历史。

    您认为从Java日历迁移到Joda日期时间是否值得,以获得应用程序速度性能?有什么陷阱需要我注意吗?

    5 回复  |  直到 11 年前
        1
  •  11
  •   Jon Skeet    14 年前

    请注意 java.util.Date 是可变的-所以如果这是一个问题,现在你使用 Calendar ,使用 Date 值得一做,因为它是一个更好的API。

    你对表演有多肯定 事实上 你的应用程序有问题吗?你说会有很多 Stock

    一般来说,迁移到Joda Time是一个好主意,但是我会测量性能,看看它有多大的不同 适合你。

        2
  •  2
  •   Reboot    14 年前

    Calendar 在你的 Stock 上课?我想用一个 Date 代表一个时间点是可以的。这似乎是你想要的,因为你想要 对象中的对象是不可变的 如果忽略不推荐使用的方法,则类应为。

    你可以用临时的 当您需要对 班级:

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(stock.getDate());
    System.out.println(calendar.getYear());
    

    日期 在你的 股票 股票 数据存储中的对象。如果一次执行多个操作,也可以重复使用相同的操作 反对。

    如果你不喜欢 接口仍然可以使用Joda Time来执行时间操作。如果需要,您可以将日期转换为Joda Time和Joda Time,以执行时间操作,并且仍然可以存储 日期 上课。

        3
  •  2
  •   Robert John    9 年前

    java.util.Calendar 实例替换为 org.joda.time.DateTime ,例如。

    String format = "YYYY-MM-dd HH:mm:ss";
    

    和实例化,重新包装 全词 类名的出现 Calendar (与

    DateTime SimpleDateFormat (与 DateTimeFormatter ),分别

    1. formatter = new SimpleDateFormat(format);
      

      formatter = DateTimeFormat.forPattern(format);
      
    2. 替换对“SimpleDateFormat”方法的调用,例如。

      String dateStr = formatter.format(Calendar.getInstance().getTime());
      

      具有

      String dateStr = DateTime.now().toString(formatter);
      

      formatter.parse(dateStr);
      

      DateTime.parse(dateStr, formatter);
      
        4
  •  1
  •   mdrg    14 年前

    我以前用过乔达,那是个很棒的图书馆。

    Date 在整个应用程序中(包括DB store和retrieve),只有在需要数据操作时才使用Joda。Joda只在需要的时候计算字段,所以我猜开销会比使用Java API类低得多;而且,您不会有对象版本问题需要传输和处理 数据库中的对象,序列化对象等等。我不希望Joda破坏这种兼容性,但它不太可能使用 日期

        5
  •  0
  •   Aravind Yarram    14 年前

    总的来说,搬到乔达去总是比较好的。但是,由于您的项目是基于与日期使用相关的用例的,所以转到joda时间确实是值得的。请看演示文稿中的第46张幻灯片,以获取某些操作的性能相关数字 link text