下面的代码演示了星期计算的有问题的joda-time实现.这种行为不是错误,而是设计决策

Joda-Time uses the ISO standard Monday to Sunday week.(也许它应该是一个错误?)

给定一个我需要计算周数的日期,这个计算必须是i18n.含义我必须根据用户的区域设置考虑正确的周编号.

下面的演示代码显示了Joda-Time的错误计算和JDK的正确计算,在我们尝试坚持使用Joda-Time的应用程序中,这是日期操作的优秀解决方案.那么,我应该混合两个时间计算库吗?我显然不愿意,这甚至是一件安全的事情,还是我会进入角落案件(有日期,日历的经验我知道这对Java来说是一个痛苦的问题).

底线:对于上述要求,建议的最佳做法是什么?

问题演示代码

public class JodaTest {

static DateTimeFormatter formatter = DateTimeFormat.forPattern("ww yyyy");

static SimpleDateFormat jdkFormatter = new SimpleDateFormat("ww yyyy");

public static void main(String[] args) {

DateTime time = new DateTime(/*year*/2009, /*monthOfYear*/12, /*dayOfMonth*/6, /*hourOfDay*/23, /*minuteOfHour*/0, /*secondOfMinute*/0, /*millisOfSecond*/0);

StringBuilder buffer = new StringBuilder()

.append("Testing date ").append(time.toString()).append("\n")

.append("Joda-Time timezone is ").append(DateTimeZone.getDefault()).append(" yet joda wrongly thinks week is ").append(formatter.print(time)).append("\n")

.append("JDK timezone is ").append(TimeZone.getDefault().getID()).append(" yet jdk rightfully thinks week is ").append(jdkFormatter.format(time.toDate())).append(" (jdk got it right ?!?!)");

System.out.println(buffer.toString());

}

}

输出:

Testing date 2009-12-06T23:00:00.000+02:00

Joda-Time timezone is Asia/Jerusalem yet joda wrongly thinks week is 49 2009

JDK time zone is Asia/Jerusalem yet jdk rightfully thinks week is 50 2009 (jdk got it right ?!?!)

最佳答案 最好的解决方案是编写DateTimeField的实现,它包装逻辑以根据语言环境提取所需的值.在内部,您可能仍然依赖于JDK数据.目的是将所有JDK代码包装在一个可重用的类中.然后你像这样使用它:

int value = dateTime.get(new LocaleAwareWeekField("en_GB"));

java 计算周_java – Joda时间周计算推理相关推荐

  1. java程序如何获取北京时间_计算当前的北京时间java(currentTimeMillis)

    计算当前的北京时间java(currentTimeMillis) 计算当前的北京时间java(currentTimeMillis) 当前北京时间 编写一个显示当前GMT时间的程序,该时间的格式为小时: ...

  2. linux c计算时间差值,获取时间和计算时间差的几种方法总结,时间差几种方法...

    获取时间和计算时间差的几种方法总结,时间差几种方法 一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( ...

  3. java 根据星期计算日期_Java 根据指定日期计算所在周的周一和周日

    标签:public static void main(String[] args) throws ParseException { SimpleDateFormat sdf=new SimpleDat ...

  4. java 自然周_java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期...

    思路:首先是获取该月的实际天数,然后从1号遍历直至该月最后一天,利用Calendar类找出该日是一周中的第几天, (1)若该日是周日,则视为一周结束,并用该日期减去6找到该周的开始日期,若相减结果小于 ...

  5. java 日期类 周_Java中用Calendar类计算周和周的起始日期

    package com.tongyue.hot.web; import java.util.Calendar; import java.util.Date; import java.util.Greg ...

  6. php 计算一年后的时间,php 计算一年多少周,同时计算出这一周的开始日期和结束日期...

    满意答案 <?php //检查闰年 $time_year=date("Y",time()); if ($time_year%4==0 && ($time_ye ...

  7. java到期日期_java 常用时间操作类,计算到期提醒,N年后,N月后的日期

    packagecom.zjjerp.tool;importjava.text.ParseException;importjava.text.ParsePosition;importjava.text. ...

  8. java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒

    //用到的类 DateUtils //这个类存在于 org.apache.commons.lang.time.DateUtils; //也就是这个包 commons-lang-2.3.jar //AP ...

  9. java 日期计算星座_Java日期时间API系列25-----Jdk8中java.time包中的新的日期时间API类,使用MonthDay计算十二星座。...

    packagecom.xkzhangsan.time.enums;import staticcom.xkzhangsan.time.constants.Constant.MONTHDAY_FORMAT ...

最新文章

  1. ubuntu(16.04.01)学习-day1
  2. apache环境下配置服务器支持https
  3. 【Flutter】Flutter Gallery 官方示例简介 ( 项目简介 | 工程构建 )
  4. Python学习笔记:进程和线程(承)
  5. Node爬取简书首页文章
  6. leetcode初级算法5.加一
  7. gcc编译器的整个工作过程
  8. 网络流24题 洛谷 3355 骑士共存
  9. 计算机全加器简单实现
  10. steam api接口 php,php – 将Steam API信息提取到页面
  11. mysql hint 简书_MySQL
  12. html鼠标变成小手_什么牌子的鼠标好用?2020双十一鼠标选购建议和产品推荐
  13. 基于内容和用户画像的个性化推荐
  14. PMP第六版5个过程组49个活动
  15. 软件工程:PG.SE.PL.PM角色定义
  16. Xcode的一种编译问题:Error: building could produce unreliable results
  17. “爱心银行”让爱心增值(转自中国文明网)
  18. adb remount失败的解决办法:
  19. 移动端下载xls文件
  20. PHP 微信公众号真正正确的客服头像上传

热门文章

  1. OGG故障错误处理总结
  2. 计算机主机是由内存和什么组成,微机是由主机和什么组成
  3. JSON格式转换成XML格式
  4. 查询数据库中的重复记录
  5. java 如何打开osk_如何打开软键盘 四个方法轻松搞定【图文】
  6. 智慧消防不只有物联网,接处警全流程管理护航企业发展
  7. 汇聚创新 共创未来---记2016华为开发者大赛沙龙深圳站
  8. 华尔街的金融风暴对中国经济产生影响?
  9. java系统运维:使用java自带的工具监控系统(java)虚机的运行
  10. 思科Cisco的十三种私有协议