feat(chat-room): 시간 포맷팅 유틸 formatMessageTime 도입 및 어댑터 리팩토링
UTC timestamp를 로컬 타임존/로케일 기준 "오전/오후 h:mm" 형식으로 변환하는 공용 유틸(TimeUtils.kt)을 추가하고, ChatMessageAdapter에서 기존 파일 레벨 함수를 제거하여 공용 유틸을 사용하도록 리팩토링했습니다. - TimeUtils.kt 추가: formatMessageTime(timestamp: Long, locale: Locale) - ChatMessageAdapter: private 함수 제거 및 import 정리
This commit is contained in:
		@@ -21,9 +21,6 @@ import kr.co.vividnext.sodalive.R
 | 
				
			|||||||
import kr.co.vividnext.sodalive.databinding.ItemChatAiMessageBinding
 | 
					import kr.co.vividnext.sodalive.databinding.ItemChatAiMessageBinding
 | 
				
			||||||
import kr.co.vividnext.sodalive.databinding.ItemChatTypingIndicatorBinding
 | 
					import kr.co.vividnext.sodalive.databinding.ItemChatTypingIndicatorBinding
 | 
				
			||||||
import kr.co.vividnext.sodalive.databinding.ItemChatUserMessageBinding
 | 
					import kr.co.vividnext.sodalive.databinding.ItemChatUserMessageBinding
 | 
				
			||||||
import java.text.SimpleDateFormat
 | 
					 | 
				
			||||||
import java.util.Date
 | 
					 | 
				
			||||||
import java.util.Locale
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 채팅 리스트 아이템 타입 정의 (UI 렌더링을 위한 래퍼)
 | 
					 * 채팅 리스트 아이템 타입 정의 (UI 렌더링을 위한 래퍼)
 | 
				
			||||||
@@ -404,13 +401,4 @@ class ChatMessageAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// region file-level util
 | 
					 | 
				
			||||||
private fun formatMessageTime(timestamp: Long): String {
 | 
					 | 
				
			||||||
    return try {
 | 
					 | 
				
			||||||
        val df = SimpleDateFormat("a h:mm", Locale.getDefault())
 | 
					 | 
				
			||||||
        df.format(Date(timestamp))
 | 
					 | 
				
			||||||
    } catch (_: Exception) {
 | 
					 | 
				
			||||||
        ""
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
// endregion
 | 
					// endregion
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * 시간 포맷팅 유틸리티
 | 
				
			||||||
 | 
					 * - UTC epoch millis(Long)을 입력 받아 사용자의 로케일/로컬 타임존 기준으로
 | 
				
			||||||
 | 
					 *   "오전/오후 h:mm" 형식의 문자열로 변환한다.
 | 
				
			||||||
 | 
					 * - 예: 1734190980000L -> "오후 11:03"
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package kr.co.vividnext.sodalive.chat.talk.room
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.text.SimpleDateFormat
 | 
				
			||||||
 | 
					import java.util.Date
 | 
				
			||||||
 | 
					import java.util.Locale
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 메시지 시간 포맷팅 유틸리티
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 입력된 [timestamp]는 UTC 기준 epoch millis여야 하며,
 | 
				
			||||||
 | 
					 * 결과는 사용자의 시스템 로케일과 시스템 시간대에 맞춰 "오전/오후 h:mm" 형식으로 반환됩니다.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 안정성을 위해 예외가 발생하면 빈 문자열("")을 반환합니다.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					fun formatMessageTime(timestamp: Long, locale: Locale = Locale.getDefault()): String {
 | 
				
			||||||
 | 
					    return try {
 | 
				
			||||||
 | 
					        // Date는 epoch millis의 절대 시점을 표현하며, SimpleDateFormat은 시스템 기본 타임존을 사용해 로컬 시간으로 포맷합니다.
 | 
				
			||||||
 | 
					        val df = SimpleDateFormat("a h:mm", locale)
 | 
				
			||||||
 | 
					        df.format(Date(timestamp))
 | 
				
			||||||
 | 
					    } catch (_: Exception) {
 | 
				
			||||||
 | 
					        ""
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user