我有一个像
这样的场景"DAY 316 OF YEAR 1998".
如何通过上述输入获得确切的日期和月份?有什么想法吗?
在Java中,我该如何实现这一目标?请帮忙。
答案 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)
答案 2 :(得分:2)
您应首先判断年份是1998
,2098
还是其他。
除此之外,您还可以使用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类指向该时刻。我想这是一个功课,所以我不会给你任何代码片段,你必须自己解决。