Groovy:获取持续时间(以年为单位)

2023-12-03

在 groovy 中运行以下代码 -

import groovy.time.*
import org.codehaus.groovy.runtime.TimeCategory
def today = new Date()
use(TimeCategory)
{
  def modifiedToday = today.plus(10.minutes)
  modifiedToday = modifiedToday.plus(10.months)
  modifiedToday = modifiedToday.plus(10.years)
  def duration = modifiedToday - today
  println duration.years
  println duration.months
  println duration.days
  println duration.minutes
}

我得到以下输出 -

0
0
3956
10

请提出建议,为什么我得到的年份和月份为 0,而所有值都以天为单位。如何获得以年和月为单位的值?


几个月后你如何得到它?

每个月都有不同的天数,那么你会做什么呢?

您可以通过执行以下操作取回它代表的日期:

println duration.from.now

或者,您可以通过执行以下操作来获取代表过去的日期:

println duration.ago

我想您可以从那里解决它,但是没有内置功能可以根据给定日期标准化 TimeDuration


Edit

这类事情从过去的一个日期滚动到指定的日期。不过,我还没有对它进行任何真正的测试,所以在将它用于任何重要的事情之前,你应该小心并测试它的寿命......

import static java.util.Calendar.*
import groovy.time.DatumDependentDuration
import groovy.time.TimeCategory

DatumDependentDuration getAge( Date dob, Date now = new Date() ) {
  dob.clearTime()
  now.clearTime()
  assert dob < now
  Calendar.instance.with { c ->
    c.time = dob
    def (years, months, days) = [ 0, 0, 0 ]
   
    while( ( c[ YEAR ] < now[ YEAR ] - 1 ) || 
           ( c[ YEAR ] < now[ YEAR ] && c[ MONTH ] <= now[ MONTH ] ) ) {
      c.add( YEAR, 1 )
      years++
    }

    while( ( c[ YEAR ] < now[ YEAR ] ) ||
           ( c[ MONTH ] < now[ MONTH ] && c[ DAY_OF_MONTH ] <= now[ DAY_OF_MONTH ] ) ) {
      // Catch when we are wrapping the DEC/JAN border and would end up beyond now
      if( c[ YEAR ] == now[ YEAR ] - 1 &&
          now[ MONTH ] == JANUARY && c[ MONTH ] == DECEMBER &&
          c[ DAY_OF_MONTH ] > now[ DAY_OF_MONTH ] ) {
        break
      }
      c.add( MONTH, 1 )
      months++
    }

    while( c[ DAY_OF_YEAR ] != now[ DAY_OF_YEAR ] ) {
      c.add( DAY_OF_YEAR, 1 )
      days++
    }
    
    new DatumDependentDuration( years, months, days, 0, 0, 0, 0 )
  }
}

println getAge( Date.parse( 'dd/MM/yyyy', '11/10/2000' ) )

// Prints: '12 years, 2 months, 30 days'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groovy:获取持续时间(以年为单位) 的相关文章

  • 反应式形式的 NgbDatepicker:设置初始值

    这可能是我一段时间以来处理过的最令人沮丧的问题之一 一般来说 日期 尤其是 NgbDatepicker 在 Angular 中处理起来有点麻烦 我正在 Angular 8 中针对反应 式表单实现 NgbDatepicker 我的问题的要点是
  • 在 Groovy 中分配对象属性的简写方法?

    我使用此约定创建 Groovy 对象 Item item1 new Item name foo weight 150 是否有操作属性对象的速记约定 像这样的东西 item1 name hello weight 175 this does n
  • 在没有 Grails 的普通 Spring MVC 中使用 GSP 视图

    我想在普通的旧 Spring MVC 应用程序中使用 GSP 视图而不是 JSP JSTL 视图 我在 web xml 中添加了一个 groovy servlet TemplateServlet 如下所示
  • 从 Jenkins Pipeline 捕获 shell 脚本输出

    我正在尝试提取 git 分支并在 Jenkinsfile 中提交信息 如下所示 def commit sh returnStdout true script git rev parse HEAD trim def branch sh ret
  • 如何在 Eclipse RCP 项目中使用 groovy?

    我有一个 Eclipse RCP 项目 我想在其中使用 Groovy 我尝试做的是 1 添加 Groovy Nature 2 在 src 文件夹下创建Groovy文件3 从 View 的createPartControl 方法调用groov
  • Django,如何将持续时间字段设置为两个日期时间字段之间的差异

    我有一个 Django 模型 我想根据两个 DateTime 字段输入的数据计算持续时间字段 并将它们之间的差异存储为小时 分钟 我什至不确定持续时间字段是正确的选择 这是我到目前为止所得到的 class CarEventsData mod
  • Gradle:从另一个插件添加插件依赖项

    我正在创建 gradle 自定义插件 我的任务之一需要确保另一个插件应用于同一项目 因为它将在其之上运行 我希望我的插件的用户避免设置对另一个插件的显式依赖 我想在我的插件中执行此操作 所以 我想要这个插件 https plugins gr
  • 如何向 Ecto.DateTime 添加天数?

    我有一个像这样创建的日期时间 Ecto DateTime from erl 2015 3 10 0 0 0 这是一个凤凰应用程序 我想在没有任何额外第三方库的情况下增加几天 如何 至少从 Elixir 1 5 0 开始 您可以使用DateT
  • 如何计算R中的月份差异

    我有格式的日期2015 03 即年月 现在我想计算两个日期之间的月份差异 示例 日期之间的差异2015 03 and 2014 12应该是 3 或 4 因为 12 月到 3 月是 3 个月或 4 个月 这取决于我们是否考虑 12 月 你可以
  • PHP:使用 DateTime 类转换日期

    我从 PayPal IPN 获得了此日期 payment date 20 12 59 Jan 13 2009 PST 我如何转换Y m d TH i s Z 我确实尝试过 date new DateTime POST payment dat
  • 在 Groovy 中将两个映射合并为结果映射

    我有两张地图 firstMap totalProjectCount 53 activeProjectCount 29 completedProjectCount 1 userCount 85 secondMap totalProjectCo
  • Groovy:验证 JSON 字符串

    我需要检查 Groovy 中的字符串是否为有效的 JSON 我的第一个想法就是把它发送出去new JsonSlurper parseText myString 并且 如果没有例外 就假设它是正确的 然而 我发现 Groovy 很乐意接受尾随
  • Groovy 中的显式输入:有时还是从不?

    后来 仍然无法弄清楚 Groovy 是否具有静态类型 似乎没有 或者使用显式类型生成的字节码是否不同 似乎是 无论如何 回答这个问题 One of the main differences between Groovy and other
  • 颤振文本小部件仅显示最后一个条目

    我正在尝试在 flutter 中创建日历 目前我正在实施这些活动 为了测试这一点 我创建了一个方法来检查当前日期 即创建行的时间 是否有事件 如果是这种情况 则会在表示内容的容器中打印 x 整个事情只是第一次测试 看它是否在原则上有效 当我
  • 无法使用 dataformatstring 格式化日期时间

    由于某种原因 我无法在网格视图中格式化日期文本
  • 1) Java 和 2) Groovy 自动导入哪些包?

    在 Groovy 中进行过相当多的编程后 我知道某些包中的类会自动导入 1 Java 和 2 Groovy 的独家新闻是什么 是否有一个明确的列表 列出了您不需要为每种语言指定导入的语言 在Java中 默认导入的唯一包是 java lang
  • git 命令显示所有(轻量级)标签创建日期

    是否有一个衬垫可以向我显示所有 git 轻量级标签的创建日期 就像是 git show tags format date 我在这个发现link http osdir com ml git 2009 05 msg01404 html适合我需求
  • 从 url 中删除域的最佳方法

    我必须从中删除域的网址 您是否知道在不使用以下内容的情况下实现这一目标的更好方法 def 示例 decodeUrl replace http www espn com http www espn com Thanks 使用 java net
  • 生成两个日期内的随机日期数组的优雅方法

    我有一个日期选择器 其中显示两个月 我想在每个可见月份中随机选择 3 个日期 date datepicker minDate new Date dateFormat DD MM d yy constrainInput true before
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助

随机推荐