2015-11-04 3 views
0

У меня есть номер дня в году. (Сегодняшний день - 308.) Я хочу преобразовать это число в дату в формате SQL (YYYY/MM/DD). Могу ли я сделать это в java?Конвертировать день года в дату в java

Заранее спасибо.

+1

[SimpleDateFormat] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html), например, имеет формат 'D', который представляет день в году. Вы можете просто проанализировать его до 'Date', указав номер – SomeJavaGuy

+1

. Нет такой вещи, как формат SQL, или формат даты вообще. Даты сохраняются как * двоичные * значения во всех базах данных. Форматы применяются только тогда, когда вы указываете даты из/в строки или сохраняете дату в виде строки вместо фактического значения с типом даты –

+0

Формат даты ANSI SQL равен YYYY-MM-DD. Но вы хотите это на Java? – jarlh

ответ

1
int dayOfYear = 112; 
Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.DAY_OF_YEAR, dayOfYear); 
SimpleDateFormat sdf = new SimpleDateFormat("YYYY/MM/dd"); 
System.out.println("Day of year " + dayOfYear + " = " + sdf.format(calendar.getTime())); 

надежда выше фрагментах поможет вам

+0

Спасибо за ответ, я попробую это, и я дам вам знать, если это поможет! – Asjon

+0

Это работает, спасибо большое! – Asjon

+0

FYI, неприятные старые классы времени, такие как ['java.util.Date'] (https://docs.oracle.com/javase/9/docs/api/java/util/Date.html), [ 'java.util.Calendar'] (https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html) и' java.text.SimpleDateFormat' теперь [наследие] (https://en.wikipedia.org/wiki/Legacy_system), вытесненный [java.time] (https://docs.oracle.com/javase/9/docs/api/java/time/package-summary. html), встроенные в Java 8 и Java 9. См. [Учебное пособие по Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

0

ТЛ; дг

Year.of(2018) 
    .atDay(308) 

2018-11-04

java.time

Современный подход использует java.t ime, встроенные в Java 8 и более поздние версии.

Класс LocalDate представляет собой значение только для даты без времени суток и без часового пояса.

Year класс представляет, ну, год. И включает в себя метод atDay(dayOfYear), где вы передаете свой порядковый день в году.

int dayOfYear = 308 ; 
Year y = Year.of(2018) ; 
LocalDate ld = y.atDay(dayOfYear) ; 

Дамп для консоли.

System.out.println("dayOfYear: " + dayOfYear + " at year: " + y + " = " + ld) ; 

См. Это code run live at IdeOne.com.

DayOfYear: 308 в год: 2018 = 2018-11-04

Что касается генерации строки в определенном формате, поиск DateTimeFormatter класса, как было покрыто много уже много раз.

И, кстати, ваш конкретный формат вовсе не «формат SQL». Независимо от того, вы должны обмениваться объектами с вашей базой данных, а не просто строками. Обратите внимание на методы и setObject в JDBC при использовании драйвера, совместимого с JDBC 4.2 или новее.


О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.

Смежные вопросы