Jak przekonwertować aktualną datę na ciąg znaków w Javie?
Jak przekonwertować aktualną datę na ciąg znaków w Javie?
Odpowiedzi:
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";
public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}
Zaczerpnięte stąd
Calendar
bardziej pożądane niż Date
?
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();
Użyj DateFormat
implementacji; np SimpleDateFormat
.
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
LocalDate.now()
.toString()
2017-01-23
Lepiej jest jawnie określić żądaną / oczekiwaną strefę czasową.
LocalDate.now( ZoneId.of( "America/Montreal" ) )
.toString()
Nowoczesnym sposobem, począwszy od Java 8 i późniejszych, jest framework java.time .
Określ strefę czasową, ponieważ data zmienia się w dowolnym momencie na całym świecie.
ZoneId zoneId = ZoneId.of( "America/Montreal" ) ; // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;
2017-01-23
Domyślnie otrzymujesz ciąg w standardowym formacie ISO 8601 .
W przypadku innych formatów użyj java.time.format.DateTimeFormatter
klasy.
Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date
, Calendar
, i SimpleDateFormat
.
Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani java.sql.*
klas.
Skąd wziąć klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak Interval
, YearWeek
, YearQuarter
, i więcej .
Szybciej :
String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
Na czas w formacie RRRR-MM-dd
String time = new DateTime( yourData ).toString("yyyy-MM-dd");
Biblioteka DateTime to:
import org.joda.time.DateTime;
DateTime
? Odpowiedź na przepełnienie stosu powinna zawierać pewne wyjaśnienie, ponieważ ta witryna ma być czymś więcej niż biblioteką fragmentów.
Większość odpowiedzi jest / była poprawna. Nowa modyfikacja API JAVA do obsługi dat zapewniła, że niektóre wcześniejsze niejasności w obsłudze dat w Javie zostały zredukowane.
W przypadku podobnych połączeń otrzymasz przestarzały komunikat.
new Date() // deprecated
Powyższe wywołanie spowodowało, że programista założył, że nowy obiekt Date da obiekt Date z aktualnym znacznikiem czasu. To zachowanie nie jest spójne w innych klasach interfejsu API języka Java.
Nowym sposobem na to jest użycie wystąpienia kalendarza .
new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()
Tutaj również konwencja nazewnictwa nie jest doskonała, ale jest bardzo zorganizowana. Dla osoby takiej jak ja, która ma trudności z kradzieżą rzeczy, ale nigdy by czegoś nie zapomniała, jeśli brzmi / wydaje się logiczne, jest to dobre podejście.
To jest bardziej synonimem prawdziwego życia
Jeszcze jednym sposobem jest użycie interfejsu API czasu Joda
new DateTime().toString("yyyy-MM-dd")
lub bardziej oczywiste
new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")
oba zwrócą ten sam wynik.
java.util.Date
, java.util.Calendar
i java.text.SimpleTextFormat
są teraz spuścizny , wyparta przez java.time klas. Ponadto projekt Joda-Time jest teraz w trybie konserwacji , a zespół zaleca migrację do java.time.
Clock
implementacja w Javie 8 jest dokładnie taka sama, jak w starszych klasach. Dopiero w Javie 9 pojawia się nowa implementacja, zdolna do przechwytywania aktualnego momentu z rozdzielczością rzędu nanosekund.
public static Date getDateByString(String dateTime) {
if(dateTime==null || dateTime.isEmpty()) {
return null;
}
else{
String modified = dateTime + ".000+0000";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date dateObj = new Date();
Date dateObj1 = new Date();
try {
if (dateTime != null) {
dateObj = formatter.parse(modified);
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateObj;
}
}
String
formacie do swojej funkcji.