【问题标题】:Generate a list of the week/year according ISO 8601根据 ISO 8601 生成周/年列表
【发布时间】:2014-02-20 16:19:12
【问题描述】:

我尝试用他们的week number(由ISO 8601定义)相应地生成一个日期列表:

mydate='2012-12-25 02:26:55.983'
for (i=1;i<365;i++)
{
  mydateAsDate=new Date().parse('yyyy-MM-dd H:mm:ss.S',mydate)+i;
  println 'Week ' + mydateAsDate.format('w') + ' => ' + mydateAsDate.format('dd.MM.yyyy');
}

这行得通,但我也想得到这样的年份:

Week 1-2013

我不知道我应该获取哪一年的信息。

有什么想法吗?

【问题讨论】:

  • 我建议您远离 Date 中已弃用的方法...如果您可能可以,请改用 Joda Time。它会让这一切变得容易得多。
  • 仅供参考,您的字符串格式不符合ISO 8601 标准。应该是:2013-W01.

标签: date datetime groovy week-number


【解决方案1】:

正如 Jon Skeet 所说,我建议使用 Joda-Time

如果你这样做了,以下应该可以解决你的问题:

mydate= new DateTime(2012,12,25)
yearLater = myDate.plusYears(1)
while(myDate < yearLater){
  println "Week ${myDate.weekOfWeekyear} - ${myDate.year}"
  myDate = myDate.plusDays(1)
}

【讨论】:

  • 好的,我会试试 JodaTime,但事实是我在一个无法添加新库的环境中工作:-/
  • 如果您需要理性来帮助证明添加库的合理性,您可以使用:java.dzone.com/articles/introducing-new-date-and-time Joda Time 库本质上正在成为 Java 8 的新标准 Java 库
  • 很好的答案,但我建议将DateTimeZone 实例传递给DateTime 的构造函数。一天的定义取决于时区。指定或获取当前 JVM 的默认值。
  • 示例代码需要一个修复。 weekOfWeekyear 方法返回一个 DateTime.Property 对象。要以int 的形式直接访问周数,请致电getWeekOfWeekyear。 (注意“get”前缀。)year 同上;致电getYear
  • 最后的想法……如果你想获得 ISO 8601 格式一周,使用这个:ISODateTimeFormat.weekyearWeek().print( dateTime ) 生成一个类似2014-W09 的字符串。
【解决方案2】:

不确定我是否理解,但您的意思是:

String startDateString = '2012-12-25 02:26:55.983'
Date startDate = Date.parse( 'yyyy-MM-dd H:mm:ss.S', startDateString )
(1..364).each { i ->
    println( (startDate++).format( "dd.MM.yyyy : 'Week' w'-'yyyy" ) )
}

【讨论】:

  • 差不多是这样,但我不能使用当前日期的年份。上面的代码返回:pastebin.com/0jk6jjjD;这应该是 1-2013 年 30.12.2012 和 31.12.2012
【解决方案3】:

我明白了:SimpleDateFormat 在使用 YYYY 格式时提供正确的周年信息

因此这仅在 java 1.7 中可用

感谢您的回复!

干杯

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2016-05-02
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多