【问题标题】:Get the date/month from total days in a year- java [closed]从一年中的总天数中获取日期/月份-java [关闭]
【发布时间】:2013-08-12 18:37:21
【问题描述】:

我有一个类似的场景

"DAY 316 OF YEAR 1998". 

如何通过上述输入获得确切的日期和月份?有什么想法吗?

在 Java 中,我怎样才能做到这一点?请帮忙。

【问题讨论】:

  • year 98 是什么?基于什么日历?
  • 看起来像一个家庭作业。你试过什么?另外,98 = 1998 还是 2098?
  • Here 是 Java 的 Calendar 类的 API。特别注意顶部的常量(一个名为DAY_OF_YEAR)。您可以使用 set() 方法来构建具有给定年份和年份的日历,然后从中读取日期。
  • 这个问题不应该被关闭。一年中的一天是许多商业和工业场景中使用的有效概念。我们有一串重复的Questions on the opposite direction,从某个日期获取一年中的某一天,其中没有一个因离题而关闭。这个问题可以通过使用 Java 内置类的简单直接代码示例来回答。

标签: java date


【解决方案1】:

根据您现有的情况,您可以通过多种方式实现这一目标。

例如。基于您示例中的String,您可以使用SimpleDateFormatString 简单解析回Date 对象,这可能是我能想到的最简单的解决方案...

try {
  String value = "DAY 316 OF YEAR 1998";
  SimpleDateFormat sdf = new SimpleDateFormat("'DAY' DDD 'OF YEAR' yyyy");
  Date date = sdf.parse(value);

  System.out.println(date);
} catch (ParseException exp) {
  exp.printStackTrace();
}

一旦有了Date 对象,就可以使用Calendar 提取Date 对象的各个部分,或者简单地使用另一个DateFormat 来格式化值...

Calendar cal = Calendar.getInstance();
cal.setTime(date);

System.out.println("Day of Month = " + cal.get(Calendar.DATE));
// Note, MONTH is 0 indexed...
System.out.println("Month = " + (cal.get(Calendar.MONTH) + 1));

System.out.println("Formatted = " + DateFormat.getDateInstance().format(date));

所以你最终应该得到类似...

Day of Month = 12
Month = 11
Formatted = 12/11/1998

【讨论】:

    【解决方案2】:

    你应该先判断年份是1998,还是2098,还是别的什么。

    除此之外,您还可以使用日历 API 实现您想要的。您感兴趣的常数是:

    使用Calendar.getInstance(TimeZone) 创建一个日历实例。使用上述常量和Calendar#set(field, value) 方法设置YEAR(1998 或2098,等等)和DAY_OF_YEAR(316)。

    【讨论】:

      【解决方案3】:
      1. 解析字符串以获得两个数字:一年中的某天和一年
      2. 创建日历,指定年份和一年中的第一天作为一年中的一天
      3. 设置指定日期
      4. 从此更新的日历中读取日期和月份参数

      【讨论】:

      • “解析你的字符串以获得两个数字:年和年” ...为什么? SimpleDateFormat 可以解析 String - 仅供参考 - 我假设你的意思是 String 解析 ;)
      【解决方案4】:

      我不确定是否有更好的方法,但您可以尝试使用以下代码行:

      Calendar mycal = new GregorianCalendar(1998, Calendar.JANUARY, 1);
      int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH);
      

      这将返回您输入的月份的天数。从一月到十二月(增加/更改您的mycal)并从您的天数中减去所有内容,直到您得到一个负数。那将是你的月份。

      【讨论】:

        【解决方案5】:

        使用Calender:-

        尝试类似的操作
        Date d;
        Calendar c= Calendar.getInstance();
        c.setTime(date);
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        

        【讨论】:

        • 真的吗?因此,给定一年中的某一天,这将起作用;)
        • 不,不会。我假设日期 d;将是用户提供的日期!!!虽然我明白你的意思;)
        【解决方案6】:

        使用 RegExps 从该字符串中提取您需要的数据,并使用 Date/Calendar 类来指向那个时刻。我猜是功课所以我不会给你任何代码sn-ps,你必须自己解决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-11
          • 2021-10-26
          • 2013-05-28
          • 1970-01-01
          • 2013-03-05
          • 1970-01-01
          • 2017-01-19
          相关资源
          最近更新 更多