从一年中的总天数获取日期/月 - java

时间:2013-08-09 07:44:18

标签: java date

我有一个像

这样的场景
"DAY 316 OF YEAR 1998". 

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

在Java中,我该如何实现这一目标?请帮忙。

6 个答案:

答案 0 :(得分:3)

根据您的可用内容,您可以通过多种方式实现这一目标。

例如。根据示例中的String,您可以使用SimpleDateFormat简单地将String解析回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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您应首先判断年份是19982098还是其他。

除此之外,您还可以使用Calendar API实现所需。您感兴趣的常数是:

使用Calendar.getInstance(TimeZone)创建日历实例。使用上面提到的常量和Calendar#set(field, value)方法设置YEAR(1998或2098,无论如何)和DAY_OF_YEAR(316)。

答案 3 :(得分:0)

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

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

这将返回您输入的月份的天数。从1月开始直到12月(增加/更改您的mycal)并减去您日期的所有内容,直到您有负数。那将是你的月份。

答案 4 :(得分:0)

使用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);

答案 5 :(得分:0)

使用RegExps从该字符串中提取所需的数据,并使用Date / Calendar类指向该时刻。我想这是一个功课,所以我不会给你任何代码片段,你必须自己解决。