2015-08-24 3 views
2

Я хотел бы получить день от объекта даты в виде целого числа. Это мой код до сих пор.День с даты Scala

val dateString = "2015-11-24 23:23:09" 
val format = new java.text.SimpleDateFormat("yyyy-MM-dd H:m:s") 
val date = format.parse(dateString) 
print(date) # this gives Tue Nov 24 23:23:09 CST 2015 

Теперь, с даты, я хочу получить день месяца как целое число. Как мне это сделать? Спасибо.

ответ

2

Просто используйте класс Calendar Java (хотя я рекомендовал бы двигаться в библиотеку Joda, если вы делаете много серьезной работы с датами/раз):

val cal = Calendar.getInstance() 
cal.setTime(date) 
val dayOfMonth = cal.get(Calendar.DAY_OF_MONTH) 
+0

Спасибо. Это работало очень хорошо. Есть ли способ добавить/вычесть дни, месяцы, годы и т. Д. С какого-то времени? Например, «2015-06-07 23:00:00» +7 часов станет «2015-06-08 06:00:00» –

+0

@SamuelKajah Класс «Календарь» предоставляет методы для такого рода вещей. – Shadowlands

+0

Этот ответ теперь устарел, используя неприятные старые классы времени, которые были устаревшими в течение многих лет, вытесняемые классами java.time. –

0

Использование Joda,

org.joda.time.DateTime.now().getDayOfMonth() 

или, что эквивалентно,

import java.util.Date 
new org.joda.time.DateTime(new Date()).getDayOfMonth 
+0

Я видел этот материал Джоды. Но когда я пытаюсь импортировать, он дает ошибку. Есть ли способ исправить это? –

+0

Обновить classpath с расположением joda jar. Для REPL, scala -cp .... jar – elm

+1

Проект Joda-Time находится в режиме обслуживания уже много лет, а команда советует перейти на классы java.time. –

1

TL; др

LocalDateTime.parse( 
    "2015-11-24 23:23:09".replace(" " , "T") 
).getDayOfMonth() 

java.time

Современный подход использует классы java.time.

Использование синтаксиса Java здесь, поскольку я не знаю Scala. Обратите внимание, что java.time использует immutable objects.

Преобразуйте свою строку в соответствие стандарту ISO 8601 с T посередине.

String input = "2015-11-24 23:23:09".replace(" " , "T") ; 

Анализировать как LocalDateTime в качестве входного отсутствуют какая-либо временная зона или офсетный из-UTC.

LocalDateTime ldt = LocalDateTime.parse(input) ; 

Interrogate for the day of month.

int dom = ldt.getDayOfMonth() ; 
Смежные вопросы