Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix date parsing (GH issue #8)
  • Loading branch information
imod committed Aug 7, 2014
1 parent 0e00ce9 commit 6fa1996
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 30 deletions.
@@ -1,41 +1,64 @@
package org.springframework.social.xing.api;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class XingDate implements Serializable {

private static final Log logger = LogFactory.getLog(XingDate.class);

private static final long serialVersionUID = 6747607636067970948L;
private Integer year;
private Integer month;


public XingDate(String dateString) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
try {
Calendar cal = Calendar.getInstance();
Date date = format.parse(dateString);
cal.setTime(date);
month = cal.get(Calendar.MONTH) + 1; // MONTH is zero based
year = cal.get(Calendar.YEAR);
} catch (ParseException e) {
logger.fatal("failed to parse date string " + dateString, e);
}
}

public Integer getMonth() {
return month;
}

public Integer getYear() {
return year;
}
private static final String DEFAULT_DATE_FORMAT = "yyyy-MM";
private static final String FALLBACK_DATE_FORMAT = "yyyy";

private static final Log logger = LogFactory.getLog(XingDate.class);

private static final long serialVersionUID = 6747607636067970948L;
private Integer year;
private Integer month;

public XingDate(String dateString) {

if (dateString != null && !"".equals(dateString.trim())) {

if (DEFAULT_DATE_FORMAT.length() == dateString.length()) {
try {
SimpleDateFormat format = new SimpleDateFormat(
DEFAULT_DATE_FORMAT);
Calendar cal = Calendar.getInstance();
Date date = format.parse(dateString);
cal.setTime(date);
month = cal.get(Calendar.MONTH) + 1; // MONTH is zero based
year = cal.get(Calendar.YEAR);
} catch (ParseException e) {
logger.fatal("failed to parse date string " + dateString, e);
}
} else if (FALLBACK_DATE_FORMAT.length() == dateString.length()) {
try {
SimpleDateFormat fallbackFormat = new SimpleDateFormat(
FALLBACK_DATE_FORMAT);
Calendar cal = Calendar.getInstance();
Date date = fallbackFormat.parse(dateString);
cal.setTime(date);
year = cal.get(Calendar.YEAR);
} catch (ParseException e) {
logger.fatal("failed to parse date string " + dateString, e);
}
} else {
logger.fatal("unknown date format: " + dateString);
}

}
}

public Integer getMonth() {
return month;
}

public Integer getYear() {
return year;
}
}
@@ -0,0 +1,37 @@
package org.springframework.social.xing.api;

import static org.junit.Assert.*;

import org.junit.Test;

public class XingDateTest {

@Test
public void testDifferentDateFormats() {

{
XingDate date = new XingDate("2010-01");
assertEquals(Integer.valueOf(2010), date.getYear());
assertEquals(Integer.valueOf(1), date.getMonth());
}

{
XingDate date = new XingDate("2007");
assertEquals(Integer.valueOf(2007), date.getYear());
assertNull(date.getMonth());
}

{
XingDate date = new XingDate("");
assertNull(date.getYear());
assertNull(date.getMonth());
}

{
XingDate date = new XingDate(null);
assertNull(date.getYear());
assertNull(date.getMonth());
}
}

}

0 comments on commit 6fa1996

Please sign in to comment.