[Java] 문자열 형태의 날짜(Date)를 원하는 형태로 바꾸기

자바에서는 날짜나 시간을 핸들링 하기 위해 Date라는 훌륭한 클래스를 제공하고 있지만 클라이언트가 서버와 통신할떄 XML/JSON등을 이용한다거나 하면 아무래도 해당 데이터형을 그대로 유지하기가 힘듭니다.

마치 모뎀 시절의 암호화/복호화가 필요하듯이 객체들을 시리얼라이징해서 문자열로 만들어내고 클라이언트에서는 데이터를 받아서 파싱이라는 과정을 거쳐 다시 사용가능한 형태의 데이터로 변환을 해야 합니다.

이때에 넘겨받은 문자열형태의 날짜 혹은 시간을 어떻게 변환할수 있을지 생각하여 만들어본 간단한 메서드입니다.
[code java]/**
 * <pre>
 * 문자열 형태의 날짜를 원하는 형태로 변환합니다.
 *
 * 예시)
 * “yyyy.MM.dd G ‘at’ HH:mm:ss z” 2001.07.04 AD at 12:08:56 PDT
 * “EEE, MMM d, ”yy” Wed, Jul 4, ’01
 * “h:mm a” 12:08 PM
 * “hh ‘o”clock’ a, zzzz” 12 o’clock PM, Pacific Daylight Time
 * “K:mm a, z” 0:08 PM, PDT
 * “yyyyy.MMMMM.dd GGG hh:mm aaa” 02001.July.04 AD 12:08 PM
 * “EEE, d MMM yyyy HH:mm:ss Z” Wed, 4 Jul 2001 12:08:56 -0700
 * “yyMMddHHmmssZ” 010704120856-0700
 * “yyyy-MM-dd’T’HH:mm:ss.SSSZ” 2001-07-04T12:08:56.235-0700
 * </pre>
 *
 * @param date 변환할 날짜
 * @param fromFormatString 변환될 포맷
 * @param toFormatString 변환할 포맷
 * @return 변환된 날짜 문자열
 */
public static String formattedDate
(String date, String fromFormatString, String toFormatString)
{
SimpleDateFormat fromFormat =
new SimpleDateFormat(fromFormatString);
SimpleDateFormat toFormat =
new SimpleDateFormat(toFormatString);
Date fromDate = null;

try
{
fromDate = fromFormat.parse(date);
}
catch(ParseException e)
{
fromDate = new Date();
}

return toFormat.format(fromDate);
}

/**
 * <pre>
 * 날짜를 원하는 형태의 문자열로 반환합니다.
 * </pre>
 *
 * @param date 변환할 Date 인스턴스
 * @param format 변환할 포맷
 * @return 변환된 날짜 문자열
 */
public static String formattedDate(Date date, String format)
{
SimpleDateFormat toFormat = new SimpleDateFormat(format);
return toFormat.format(date);
}[/code]
이제 사용해 봅시다. 다음과 같이 간단하게 출력하고자 하는 형태로 변환하여 사용하시면 됩니다.
[code java]formattedDate(“2010-12-25”, “yyyy-MM-dd”, “yyMMdd”);
formattedDate(new Date(), “yyyy-MM-dd”);[/code]

[Java/Android] 코드상에서 레이아웃 파라미터 설정하기

보통의 안드로이드는 MVC(Model-View-Controller)를 충실하게 이행하고 있습니다. 여기서 View에 해당하는 부분을 XML을 이용하여 표현하고 있죠. 이것은 어찌보면 편리하고 좋아 보이지만 동적인 화면 구성은 역시나 코드에 의존할 수 밖에 없습니다. 아이폰에서도 아무리 Interface Builder에 의존하더라도 이런 부분은 어쩔수 없는게 아닐까 싶기도 하고요.

그래도 조악한 안드로이드의 XML에디터를 보면 Interface Builder에 한표 더 주고 싶어지네요. 아무튼 코드에 의존한 레이아웃 동적 변화를 위해서는 LayoutParam이라는 클래스를 이용해야 합니다. 이 클래스는 거의 대부분의 화면 구성을 위한 ViewGroup을 상속받는 클래스들은 가지고 있습니다.

사용자 삽입 이미지

저기 스크린샷에 보이는 클래스들이 다양한 화면 구성을 위한 위젯들이 가지고 있는 레이아웃 파라미터 클래스입니다. 적용하려는 위젯에 따라 적절히 선택하여 사용을 하시면 됩니다. 어떤것을 사용하냐에 따라 추가로 설정할 수 있는 범위도 달라집니다.

예를 들면 LinearLayout.LayouutParams의 경우 여백의 값을 설정할 수 있습니다. 나머지 위젯의 LayoutParams들도 마찬가지로 위젯에 특화된 기능들이 한두가지씩 있습니다.
[code java]LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
params.setMargins(15, 20, 15, 20); //left, top, right, bottom[/code]
위에서 볼 수 있듯이 FILL_PARENT, WRAP_CONTENT 설정을 사용할수도 있습니다. 다음은 이렇게 사용한다는 예제입니다.
[code java]LinearLayout ll = new LinearLayout(this);      
LinearLayout.LayoutParams lparam = new LinearLayout.LayoutParams(
             LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);
lparam.width = 200;

ll.setLayoutParams(lparam);
ll.setBackgroundColor(Color.parseColor(“#00ff00”));

setContentView(ll);[/code]