날짜 데이터를 String으로 받았다. Format은? Sorting은?
728x90
반응형

순서맞추기. 다행히 개발할 때는 이정도로 어렵지 않다.




RecyclerView에 올라오는 데이터에 Date 정보가 있을 수 있다.

이런 경우 시간 순서에 맞춰서 데이터를 쌓고 싶다면?

물론 서버에서 줄때 예쁘게 주면 좋겠지만

그렇지 않을 수 있으니 클라이언트에서도 준비를 한다.

포스팅을 기반으로 데이터를 순서대로 맞춰보겠다.



1. String으로 들어온 Date의 순서를 맞추기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@BindingAdapter("bind:item")
public static void bindItem(RecyclerView recyclerView, ObservableArrayList<MyItem> items) {
    MyAdapter adapter = (MyAdapter) recyclerView.getAdapter();
 
    // 정렬 : myDate 내림차순
    if (items.size() > 1) {
        Collections.sort(items, (o1, o2) ->
                o2.myDate.compareTo(o1.myDate)
        );
    }
 
    if (adapter != null) {
        adapter.setItem(items);
    }
}
cs


item.myDate는 String이다.

만약 int라면 위가 아닌 다른 방식을 사용한다. (검색해보면 나옴)

오름차순으로 변경하고 싶다면 o1.myDate.compareTo(o2.myDate)로 만들면 된다.



2. String을 내가 원하는 format으로 view에 출력하고 싶다.

ex : 201808061530

위처럼 연도, 월, 일, 시, 분 정보를 나열한 String 형태를 원하는 포맷으로 출력해보고자 한다.

포맷 바꾸는 김에 금액 정보에 콤마도 찍어보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String price = String.format("%,d", item.couponPrice);
 
String date = item.myDate;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
try {
    Date tempDate = dateFormat.parse(date);
    SimpleDateFormat newFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm");
    SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy년 MM월 dd일");
    item.myDate = newFormat.format(tempDate);
    item.myDay = dayFormat.format(tempDate);
catch (ParseException e) {
    e.printStackTrace();
}
 
binding.setVariable(BR.my, item);
cs


Date를 파싱하는 과정에서 try-catch문이 들어갈 필요가 있다.

변경된 값을 binding하여 변경된 data를 출력하는 것까지 확인할 수 있다.



728x90
반응형