我有一个像
"DAY 316 OF YEAR 1998".
如何通过上述输入获得确切的日期和月份?有任何想法吗?
在Java中,我怎样才能做到这一点?请帮忙。
There are any number of ways you might achieve this, based on what you have available.
For example. Based on the String
in your example, you could use a SimpleDateFormat
to simple parse the String
back to a Date
object, which is probably the easiest solution I can think of...
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();
}
Once you have a Date
object, you can use Calendar
to extract various parts of the Date
object or simple use another DateFormat
to format the value...
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));
So you should end up with, something like...
Day of Month = 12
Month = 11
Formatted = 12/11/1998
您应该首先判断年份是1998
、 或2098
,还是别的什么。
除此之外,您可以使用 Calendar API 实现您想要的。您感兴趣的常数是:
创建一个日历实例,使用Calendar.getInstance(TimeZone)
. 使用上述常量和方法设置YEAR
(1998 或 2098,等等)和(316)。DAY_OF_YEAR
Calendar#set(field, value)
我不确定是否有更好的方法,但您可以尝试使用以下代码行:
Calendar mycal = new GregorianCalendar(1998, Calendar.JANUARY, 1);
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH);
这将返回您输入的月份的天数。从一月到十二月(增加/改变你的mycal
)并从你的天数中减去所有的东西,直到你有一个负数。那将是你的一个月。
使用以下方法尝试这样的事情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);
使用 RegExps 从该字符串中提取您需要的数据,并使用 Date/Calendar 类指向该时刻。我想这是一个家庭作业,所以我不会给你任何代码片段,你必须自己解决。