如何获得当年的任何具体日期

时间:2013-09-06 01:39:23

标签: java date

您好我想知道是否有任何方式使用Jav的Date类或Joda Time类来获取今年的任何特定日期。例如,如果我想要日期12/31/2013。这是一个问题的原因是因为我给出了某人生日的字符串表示,请说"12311991" "MMddyyyy"并且我想将其转换为具有month 12 day 31 and year 2013的日期。

任何人都可以帮我这个吗?

我正在使用DateMidnight Joda时间类,我使用Simple Formatter将字符串解析为日期,但我想知道是否有任何方法可以将年份设置为特定年份。

5 个答案:

答案 0 :(得分:5)

首先将String转换为Date ...

String dateString = "12311991";
SimpleDateFormat sdf = new SimpleDateFormat("MMddyyyy");

Date date = sdf.parse(dateString);

导致......

Tue Dec 31 00:00:00 EST 1991

接下来,使用Calendar修改year

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.YEAR, 2013);
date = cal.getTime();

导致......

Tue Dec 31 00:00:00 EST 2013

答案 1 :(得分:3)

如果您想使用JodaTime实施,可以执行以下操作。使用DateTimeFormatter格式获取DateTime,然后使用DateTime#withYear(int)方法,年份可以更改。

String dob = "12311991";
DateTimeFormatter fmt = DateTimeFormat.forPattern("MMddyyyy");
DateTime dt = fmt.parseDateTime(dob).withYear(2013);
System.out.println(dt);

答案 2 :(得分:1)

尝试使用日历

set(int year,
   int month,
   int date)

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int,int,int)

答案 3 :(得分:1)

只需使用SimpleDateFormat(click me即可查看所有格式模式)。

String string = "12/31/2013";
Date date = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH).parse(string);
System.out.println(date); 

答案 4 :(得分:0)

java.time

其他答案已过时。旧的日期时间类以及Joda-Time已被Java 8及更高版本中内置的java.time框架所取代。

LocalDate类真正代表一个仅限日期的值,没有时间和没有时区(缺少原始日期时间类)。

String input = "12311991";
DateTimeFormatter formatter = DateTimeFormatter.forPattern("MMddyyyy");
LocalDate localDate = LocalDate.parse( input , formatter ); // 1991-12-31
LocalDate differentYear = localDate.withYear( 2013 );  // 2013-12-31