DB에서 가져온 createdAt 컬럼의 데이터는 글로벌 표준시(UTC)로 되어 있기 때문에
아래 코드와 같이 로컬의 시간으로 변경해야 한다.
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat df = new SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초");
sf.setTimeZone(TimeZone.getTimeZone("UTC"));
df.setTimeZone(TimeZone.getDefault());
// 서버의 시간(글로벌 표준시)를 로컬의 시간으로 변환해야 한다.
try {
Date date = sf.parse(posting.createdAt);
String localTime = df.format(date);
holder.txtDate.setText(localTime);
} catch (ParseException e) {
throw new RuntimeException(e);
}
근데 아래 코드 4줄은 어뎁터의 onBindViewHolder()에 넣으면,
ArrayList 모든 요소마다 같은 작업을 계속 cpu가 수행하기 때문에
성능 개선을 위해 첫 1회만 실행하도록 생성자 함수와 전역변수로 뺀다.
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat df = new SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초");
sf.setTimeZone(TimeZone.getTimeZone("UTC"));
df.setTimeZone(TimeZone.getDefault());
전체 코드
public class PostingAdapter extends RecyclerView.Adapter<PostingAdapter.ViewHolder> {
Context context;
ArrayList<Posting> postingArrayList;
SimpleDateFormat sf;
SimpleDateFormat df;
public PostingAdapter(Context context, ArrayList<Posting> postingArrayList) {
this.context = context;
this.postingArrayList = postingArrayList;
// 성능 개선을 위해 첫 1회만 실행하도록 생성자 안에다 넣는다.
sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
df = new SimpleDateFormat("yyyy년MM월dd일 HH시mm분ss초");
sf.setTimeZone(TimeZone.getTimeZone("UTC"));
df.setTimeZone(TimeZone.getDefault());
}
@NonNull
@Override
public PostingAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.posting_row, parent, false);
return new PostingAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Posting posting = postingArrayList.get(position);
Glide.with(context).load(posting.imageUrl).into(holder.imgPhoto);
holder.txtContent.setText(posting.content);
holder.txtEmail.setText(posting.email);
// 서버의 시간(글로벌 표준시)를 로컬의 시간으로 변환해야 한다.
try {
Date date = sf.parse(posting.createdAt);
String localTime = df.format(date);
holder.txtDate.setText(localTime);
} catch (ParseException e) {
throw new RuntimeException(e);
}
// 좋아요 처리
if (posting.isFavorite == 0){
holder.imgLike.setImageResource(R.drawable.favorite_null);
} else {
holder.imgLike.setImageResource(R.drawable.baseline_favorite_24);
}
}
@Override
public int getItemCount() {
return postingArrayList.size();
}
// 아래는 생략
'Android Studio' 카테고리의 다른 글
[Android Studio] TabBar Fragment 사용하기 (1) | 2024.01.10 |
---|---|
[Android Studio] TabBar 만들기 (2) | 2024.01.09 |
[Android Studio] Retrofit2 API 호출 중 form-data 처리 하는 방법 (0) | 2024.01.08 |
[Android Studio] 카메라, 앨범 사용하기 (1) | 2024.01.05 |
[Android Studio] AlertDialog array로 사용하기 (0) | 2024.01.05 |