diff --git a/core/common/src/main/java/com/hilingual/core/common/util/DateFormatter.kt b/core/common/src/main/java/com/hilingual/core/common/util/DateFormatter.kt new file mode 100644 index 000000000..e0a4624d5 --- /dev/null +++ b/core/common/src/main/java/com/hilingual/core/common/util/DateFormatter.kt @@ -0,0 +1,38 @@ +package com.hilingual.core.common.util + +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter +import java.util.Locale + +object DateFormatters { + val KOREAN_FULL_DATE: DateTimeFormatter = DateTimeFormatter.ofPattern("M월 d일 EEEE", Locale.KOREA) + + val KOREAN_SHORT_DATE: DateTimeFormatter = DateTimeFormatter.ofPattern("M월 d일", Locale.KOREA) + + val ISO_DATE: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE +} + +/** + * LocalDate를 한국어 전체 날짜 형식으로 변환합니다. + * @return "M월 d일 EEEE" 형식의 문자열 (예: "2월 6일 목요일") + */ +fun LocalDate.toKoreanFullDate(): String = this.format(DateFormatters.KOREAN_FULL_DATE) + +fun LocalDateTime.toKoreanFullDate(): String = this.format(DateFormatters.KOREAN_FULL_DATE) + +/** + * LocalDate를 한국어 짧은 날짜 형식으로 변환합니다. + * @return "M월 d일" 형식의 문자열 (예: "2월 6일") + */ +fun LocalDate.toKoreanShortDate(): String = this.format(DateFormatters.KOREAN_SHORT_DATE) + +fun LocalDateTime.toKoreanShortDate(): String = this.format(DateFormatters.KOREAN_SHORT_DATE) + +/** + * LocalDate를 ISO 날짜 형식으로 변환합니다. + * @return "yyyy-MM-dd" 형식의 문자열 (예: "2026-02-06") + */ +fun LocalDate.toIsoDate(): String = this.format(DateFormatters.ISO_DATE) + +fun LocalDateTime.toIsoDate(): String = this.format(DateFormatters.ISO_DATE) diff --git a/core/common/src/main/java/com/hilingual/core/common/util/FormatRelativeTime.kt b/core/common/src/main/java/com/hilingual/core/common/util/FormatRelativeTime.kt index c74532213..981cf538f 100644 --- a/core/common/src/main/java/com/hilingual/core/common/util/FormatRelativeTime.kt +++ b/core/common/src/main/java/com/hilingual/core/common/util/FormatRelativeTime.kt @@ -18,8 +18,6 @@ package com.hilingual.core.common.util import java.time.Instant import java.time.LocalDateTime import java.time.ZoneId -import java.time.format.DateTimeFormatter -import java.util.Locale import java.util.concurrent.TimeUnit private const val ONE_MINUTE = 1L @@ -27,8 +25,6 @@ private const val ONE_HOUR_IN_MINUTES = 60L private const val ONE_DAY_IN_MINUTES = 1440L private const val ONE_WEEK_IN_MINUTES = 10080L -private val DATE_FORMATTER = DateTimeFormatter.ofPattern("M월 d일", Locale.KOREA) - fun formatRelativeTime(minutesAgo: Long): String { return when { minutesAgo < ONE_MINUTE -> "방금 전" @@ -39,7 +35,7 @@ fun formatRelativeTime(minutesAgo: Long): String { val pastTime = System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(minutesAgo) val instant = Instant.ofEpochMilli(pastTime) val localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()) - DATE_FORMATTER.format(localDateTime) + localDateTime.toKoreanShortDate() } } } diff --git a/data/diary/src/main/java/com/hilingual/data/diary/repositoryimpl/DiaryRepositoryImpl.kt b/data/diary/src/main/java/com/hilingual/data/diary/repositoryimpl/DiaryRepositoryImpl.kt index 6a6a2eef0..0fef3b2dd 100644 --- a/data/diary/src/main/java/com/hilingual/data/diary/repositoryimpl/DiaryRepositoryImpl.kt +++ b/data/diary/src/main/java/com/hilingual/data/diary/repositoryimpl/DiaryRepositoryImpl.kt @@ -17,6 +17,7 @@ package com.hilingual.data.diary.repositoryimpl import android.net.Uri import com.hilingual.core.common.util.suspendRunCatching +import com.hilingual.core.common.util.toIsoDate import com.hilingual.data.diary.datasource.DiaryRemoteDataSource import com.hilingual.data.diary.model.BookmarkResult import com.hilingual.data.diary.model.DiaryContentModel @@ -29,11 +30,8 @@ import com.hilingual.data.diary.model.toModel import com.hilingual.data.diary.repository.DiaryRepository import com.hilingual.data.presigned.repository.FileUploaderRepository import java.time.LocalDate -import java.time.format.DateTimeFormatter import javax.inject.Inject -private val DATE_FORMATTER: DateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE - internal class DiaryRepositoryImpl @Inject constructor( private val diaryRemoteDataSource: DiaryRemoteDataSource, private val fileUploaderRepository: FileUploaderRepository @@ -82,7 +80,7 @@ internal class DiaryRepositoryImpl @Inject constructor( diaryRemoteDataSource.postDiaryFeedbackCreate( originalText = originalText, - date = date.format(DATE_FORMATTER), + date = date.toIsoDate(), fileKey = fileKey ).data!!.toModel() } diff --git a/presentation/diarywrite/src/main/java/com/hilingual/presentation/diarywrite/DiaryWriteScreen.kt b/presentation/diarywrite/src/main/java/com/hilingual/presentation/diarywrite/DiaryWriteScreen.kt index 8a98d2077..0189e98b1 100644 --- a/presentation/diarywrite/src/main/java/com/hilingual/presentation/diarywrite/DiaryWriteScreen.kt +++ b/presentation/diarywrite/src/main/java/com/hilingual/presentation/diarywrite/DiaryWriteScreen.kt @@ -72,6 +72,7 @@ import com.hilingual.core.common.provider.LocalTracker import com.hilingual.core.common.trigger.LocalDialogTrigger import com.hilingual.core.common.trigger.LocalMessageController import com.hilingual.core.common.util.UiState +import com.hilingual.core.common.util.toKoreanFullDate import com.hilingual.core.designsystem.component.button.HilingualButton import com.hilingual.core.designsystem.component.textfield.HilingualLongTextField import com.hilingual.core.designsystem.theme.HilingualTheme @@ -99,8 +100,6 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.delay import java.io.File import java.time.LocalDate -import java.time.format.DateTimeFormatter -import java.util.Locale import com.hilingual.core.designsystem.R as DesignSystemR @Composable @@ -542,7 +541,7 @@ private fun DateText( val selectedDate = selectedDateProvider() val formattedDate = remember(selectedDate) { - selectedDate.format(DATE_FORMATTER) + selectedDate.toKoreanFullDate() } Text( @@ -552,9 +551,6 @@ private fun DateText( ) } -private val DATE_FORMATTER: DateTimeFormatter = - DateTimeFormatter.ofPattern("M월 d일 EEEE", Locale.KOREAN) - private fun createTempImageFile(context: Context): Pair { val imageFile = File.createTempFile("camera_", ".jpg", context.cacheDir) val uri = FileProvider.getUriForFile( diff --git a/presentation/home/src/main/java/com/hilingual/presentation/home/component/footer/DiaryDateInfo.kt b/presentation/home/src/main/java/com/hilingual/presentation/home/component/footer/DiaryDateInfo.kt index b85aa0d6e..9d68663bb 100644 --- a/presentation/home/src/main/java/com/hilingual/presentation/home/component/footer/DiaryDateInfo.kt +++ b/presentation/home/src/main/java/com/hilingual/presentation/home/component/footer/DiaryDateInfo.kt @@ -26,13 +26,9 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp +import com.hilingual.core.common.util.toKoreanFullDate import com.hilingual.core.designsystem.theme.HilingualTheme import java.time.LocalDate -import java.time.format.DateTimeFormatter -import java.util.Locale - -private val DATE_FORMATTER: DateTimeFormatter = - DateTimeFormatter.ofPattern("M월 d일 EEEE", Locale.KOREAN) @Composable internal fun DiaryDateInfo( @@ -42,7 +38,7 @@ internal fun DiaryDateInfo( modifier: Modifier = Modifier ) { val formattedDate = remember(selectedDate) { - selectedDate.format(DATE_FORMATTER) + selectedDate.toKoreanFullDate() } val isFuture = remember(selectedDate) {