热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaiso8601PT1M_如何从Java中的ISO8601周数计算日期

更新:此处介绍的概念仍然适用,但代码已过时.Joda-Time项目现在是maintenancemode,建议迁移到java.time课程.请参阅AnswerbySzu

更新:此处介绍的概念仍然适用,但代码已过时.

Joda-Time项目现在是

maintenance mode,建议迁移到

java.time课程.请参阅

Answer by Szulc中的java.time代码.

简答

DateTime dateTimeStart = new DateTime( "2003-W01-1",DateTimeZone.UTC ); // Joda-Time 2.4.

DateTime dateTimeStop = dateTimeStart.plusWeeks( 1 );

有关详情,请继续阅读.

避免j.u.Date

与Java捆绑在一起的旧java.util.Date和java.util.Calendar类是众所周知的麻烦,应该避免. Sun及其合作伙伴在Java库中添加了许多简洁的东西,但并非所有这些都很好.日期时间类可能是最糟糕的.

ISO周规则

您可以使用这些类编写自己的代码,但我不建议这样做.计算ISO周的规则很简单:

>第1周是该日历年的第一个星期四.

>星期一是星期的第一天.

乔达时间

在他们的位置,常见的替代是一个名为Joda-Time的库.该库包括对ISO周的出色支持.

只需添加一个.jar文件即可轻松添加到项目中.

其他示例代码

java.time

Java 8有一个新的日期时间框架,受Joda-Time的启发,可以在java.time包中找到.

Java是为了将库混合在一起而构建的.这样做是面向对象编程和后期绑定的主要目的之一.对你的问题的评论指的是老板非理性或无知地禁止添加图书馆这种非常普遍的情况.虽然这种禁令有正当理由,但很少见.

禁止在Java中添加库和罐子就像禁止在配备挂钩的车辆上挂钩拖车.

旧的日期时间课程确实非常糟糕,我们很多人都将Joda-Time添加到大多数新项目作为习惯.

半开

在日期时间工作中,定义时间跨度的常用方法是“半开放”方法.这意味着开始是包容性的,而结尾是独占的.因此,标准周从星期一的第一个时刻开始,到下一个星期一的第一个时刻结束.搜索StackOverflow.com以获取更多讨论和示例.

ISO周的文本表示

拿一年,一个连字符,一个W分隔符,周数代表整个星期:YYYY-Www.添加连字符和星期几数字以确定该周内的一天:YYYY-Www-D.

Joda-Time理解这种格式,如下面的代码示例所示.

示例代码

这是一些Joda-Time 2.4代码.搜索StackOverflow.com以获取有关这些概念的讨论和示例.这个问题和这个答案几乎与许多其他答案重复.

int year = 2003;

int week = 1; // Domain: 1 to 53.

// Build a String in ISO 8601 Week format: YYYY-Www-D

// Hard-coding a `1` for Monday,the standard first-day-of-week.

String input = ( String.format( "%04d",year ) + "-W" + String.format( "%02d",week ) + "-1" );

// Specify the time zone by which to define the beginning of a day.

DateTimeZone timeZone = DateTimeZone.UTC; // Or: DateTimeZone.forID( "America/Montreal" );

// Calculate beginning and ending,using Half-Open (inclusive,exclusive) approach.

DateTime dateTimeStart = new DateTime( input,timeZone );

DateTime dateTimeStop = dateTimeStart.plusWeeks( 1 );

// Use Joda-Time's tidy Interval class to represent the entire week. Use getters to access start and stop.

Interval weekInterval = new Interval( dateTimeStart,dateTimeStop );

// Is today in that week? Joda-Time has handy methods: contains,isBefore,isAfter,overlap.

boolean isTodayInThatWeek = weekInterval.contains( DateTime.now() );

转储到控制台.

System.out.println( "input: " + input );

System.out.println( "dateTimeStart: " + dateTimeStart );

System.out.println( "dateTimeStop: " + dateTimeStop );

System.out.println( "interval: " + interval );

System.out.println( "isTodayInThatWeek: " + isTodayInThatWeek );

跑步时

input: 2003-W01-1

dateTimeStart: 2002-12-30T00:00:00.000Z

dateTimeStop: 2003-01-06T00:00:00.000Z

interval: 2002-12-30T00:00:00.000Z/2003-01-06T00:00:00.000Z

isTodayInThatWeek: false



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
岁月完好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有