Вы указываете неправильный часовой пояс в dateString
, который следует ожидать через два часа, сумма которого будет отличаться на два дня (разница между 31/03 и 01/04); поэтому, чтобы ваш тест работал, вам нужно изменить часовой пояс с +0000 на +0200, как показано ниже:
@Test
fun shouldFormatDate() {
val dateString = "Wed Mar 31 23:13:44 +0200 2010"
val expected = "31/03/2010 23:13"
assertThat(formatDate(dateString)).isEqualTo(expected)
}
ОБНОВЛЕНИЕ
TimeZone в переменной dateString
зависит от TimeZone локальной машины, на которой вы запускаете этот тест; и это причина того, что + 0100 работает с вами, но не со мной, потому что у меня установлен часовой пояс GMT + 200, и, скорее всего, вы находитесь в месте с GMT + 100.
Чтобы убедиться в этом, попробуйте изменить часовой пояс вашего локального компьютера на другой, отличный от вашего, и запустите тест, вы обнаружите, что он не работает.
Для того, чтобы ваш тестируйте независимо от часового пояса вашего компьютера, тогда вам нужно явно установить его; например, я выберу часовой пояс «Австралия / Сидней», который GMT + 11, а затем использовать метод TimeZone.setDefault()
для переопределения часового пояса вашего компьютера.
Код
fun formatDate(dateString: String): String {
TimeZone.setDefault(TimeZone.getTimeZone("Australia/Sydney")) // (GMT+11:00)
val locale = Locale.ENGLISH
val time = SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZZ yyyy", locale).parse(dateString)?.time
return SimpleDateFormat("dd/MM/yyyy HH:mm", locale).format(time)
}
Тест
@Test
fun shouldFormatDate() {
val dateString = "Wed Mar 31 23:13:44 +1100 2010"
val expected = "31/03/2010 23:13"
assertThat(formatDate(dateString)).isEqualTo(expected)
}
Также вы можете посмотреть этот