Jak przekonwertować Javę.util.Date to java.sql.Randka?
Próbuję użyć java.util.Date
jako wejście, a następnie utworzenie z nim zapytania - więc potrzebuję java.sql.Date
.
Byłem zaskoczony, że nie mógł wykonać konwersji w sposób dorozumiany lub jawny - ale nawet nie wiem, jak bym to zrobił, ponieważ Java API jest nadal dość nowy dla mnie.
17 answers
Tl;dr
Jak przekonwertować Javę.util.Date to java.sql.Randka?
Obie klasy są przestarzałe.
- użycie java.czas klasy zamiast Dziedzictwa
java.util.Date
&java.sql.Date
z JDBC 4.2 lub nowszym. - Konwertuj do / Z Javy.czas pracy z kodem jeszcze nie zaktualizowanym do Javy.czas.
Przykładowe zapytanie z PreparedStatement
.
myPreparedStatement.setObject(
… , // Specify the ordinal number of which argument in SQL statement.
myJavaUtilDate.toInstant() // Convert from legacy class `java.util.Date` (a moment in UTC) to a modern `java.time.Instant` (a moment in UTC).
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Adjust from UTC to a particular time zone, to determine a date. Instantiating a `ZonedDateTime`.
.toLocalDate() // Extract a date-only `java.time.LocalDate` object from the date-time `ZonedDateTime` object.
)
-
Instant
zamiastjava.util.Date
oba reprezentują moment w UTC. ale teraz z nanosekundami zamiast milisekund. -
LocalDate
zamiastjava.sql.Date
obie reprezentują wartość tylko dla daty bez pory dnia i bez strefy czasowej.
Szczegóły
Jeśli próbujesz pracować z wartościami tylko daty( Bez godziny dnia, bez strefy czasowej), użyj LocalDate
Klasa zamiast java.util.Date
.
Java.czas
[46]}w Javie 8 i późniejszych, kłopotliwe stare klasy dat-time połączone z wczesnymi wersjami Javy zostały zastąpione przez nową {92]}Javę.pakiet czasowy . Zobacz Oracle Tutorial . Wiele funkcji zostało przeniesionych do Java 6 i 7 w ThreeTen-Backport i zaadaptowanych do Androida w ThreeTenABP {58]}.A typ danych SQL DATE
ma być tylko Data, bez pory dnia i Brak strefy czasowej. Java nigdy nie miała dokładnie takiej klasy, dopóki java.time.LocalDate
w Javie 8. Stwórzmy taką wartość, otrzymując dzisiejszą datę zgodnie z określoną strefą czasową(Strefa czasowa jest ważna w określaniu daty, ponieważ nowy dzień świta wcześniej w Paryżu niż w Montréal, na przykład).
LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Use proper "continent/region" time zone names; never use 3-4 letter codes like "EST" or "IST".
W tym momencie możemy być skończeni. Jeśli twój sterownik JDBC jest zgodny z JDBC 4.2 spec, powinieneś być w stanie przekazać LocalDate
przez setObject
na PreparedStatement
aby zapisać w polu daty SQL.
myPreparedStatement.setObject( 1 , localDate );
Podobnie, użyj ResultSet::getObject
pobieranie z kolumny daty SQL do obiektu Java LocalDate
. Podanie klasy w drugim argumencie sprawia, że kod jest bezpieczny dla typu .
LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class );
Innymi słowy, to całe pytanie jest bez znaczenia w JDBC 4.2 lub później.
Jeśli twój sterownik JDBC nie działa w ten sposób, musisz wrócić do konwersji do Javy.sql typy.
Konwertuj na Javę.sql.Data
Aby przekonwertować, użyj nowych metod dodanych do starych klas daty i czasu. Możemy zadzwonić java.sql.Date.valueOf(…)
do konwersji LocalDate
.
java.sql.Date sqlDate = java.sql.Date.valueOf( todayLocalDate );
I w przeciwnym kierunku.
LocalDate localDate = sqlDate.toLocalDate();
Konwersja z java.util.Date
Chociaż powinieneś unikać używania starych klas date-time, możesz być do tego zmuszony podczas pracy z istniejącym kodem. Jeśli tak, możesz przekonwertować do / Z Javy.czas.
Przejść przez klasę Instant
, która reprezentuje moment na osi czasu w UTC. An Instant
jest podobne w idei do a java.util.Date
. Ale zauważ, że Instant
mA rozdzielczość do nanosekund , podczas gdy java.util.Date
ma tylko milisekund rozdzielczość.
Aby przekonwertować, użyj nowych metod dodanych do starych klas. Na przykład, java.util.Date.from( Instant )
oraz java.util.Date::toInstant
.
Instant instant = myUtilDate.toInstant();
Aby określić datę, potrzebujemy kontekstu strefy czasowej. W danym momencie data zmienia się na całym świecie w zależności od strefy czasowej. Apply a ZoneId
aby uzyskać ZonedDateTime
.
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
LocalDate localDate = zdt.toLocalDate();
† java.sql.Klasa date udaje datę-tylko bez pory dnia, ale w rzeczywistości robi porę dnia, dostosowaną do godziny północy. Mylące? Tak, stare zajęcia z randkami to bałagan.
O Javie.czas
The java.czas framework jest wbudowany w Java 8 i nowsze. Klasy te zastępują kłopotliwe stare dziedzictwo klasy date-time, takie jak java.util.Date
, Calendar
, & SimpleDateFormat
.
The Joda-czas projekt, obecnie w trybie konserwacji , radzi migrację do java.czas klasy.
Aby dowiedzieć się więcej, Zobacz samouczek Oracle. I wyszukaj przepełnienie stosu dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymienić Javę.obiekty time bezpośrednio z bazą danych. Użyj a JDBC driver zgodny z JDBC 4.2 lub nowszy. Nie ma potrzeby stosowania łańcuchów, nie ma potrzeby stosowania klas java.sql.*
.
Skąd pobrać Javę.zajęcia czasowe?
-
Java SE 8, Java SE 9, Java SE 10, i Później
- Wbudowany.
- część standardowego API Javy z dołączoną implementacją.
- Java 9 dodaje kilka drobnych funkcji i poprawki.
-
Java SE 6 oraz Java SE 7
- Większość Javy.funkcja czasu powraca-przeportowana do Javy 6 i 7 W ThreeTen-Backport.
-
Android
- późniejsze wersje implementacji pakietu Androida java.czas klasy.
- Dla wcześniejszego Androida ( ThreeTenABP projekt dostosowuje ThreeTen-Backport (wspomniane wyżej). Zobacz też Jak stosować ThreeTenABP....
The ThreeTen-Extra projekt rozszerza Javę.czas z dodatkowymi zajęciami. Ten projekt jest poligonem dla potencjalnych przyszłych dodatków do Javy.czas. Możesz znaleźć tutaj kilka przydatnych klas, takich jak Interval
, YearWeek
, YearQuarter
, i więcej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 18:30:15
Nieważne....
public class MainClass {
public static void main(String[] args) {
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
}
}
To wyjaśnia. Link jest http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htmWarning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-09 21:18:40
Z drugą odpowiedzią możesz mieć problemy z informacją o czasie (porównaj daty z nieoczekiwanymi wynikami!)
Proponuję:
java.util.Calendar cal = Calendar.getInstance();
java.util.Date utilDate = new java.util.Date(); // your util date
cal.setTime(utilDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
java.sql.Date sqlDate = new java.sql.Date(cal.getTime().getTime()); // your sql date
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 06:38:47
Ta funkcja zwróci przekonwertowaną datę SQL z obiektu java date.
public java.sql.Date convertJavaDateToSqlDate(java.util.Date date) {
return new java.sql.Date(date.getTime());
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 15:50:13
Konwersja java.util.Data
na java.sql.Data
spowoduje utratę godziny, minuty i sekundy. Jeśli jest to możliwe, proponuję użyć java.sql.Timestamp
w ten sposób:
prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime()));
Aby uzyskać więcej informacji, możesz sprawdzić to pytanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:28
W moim przypadku wybierania daty Z jxdatepicker (java calender) i zapisywania jej w bazie danych jako Typu daty SQL, poniżej działa dobrze ..
java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());
Gdzie pickedDate jest obiektem jxdatepicker
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-09 14:20:33
Ta funkcja zwróci przekonwertowaną datę SQL z obiektu java date.
public static java.sql.Date convertFromJAVADateToSQLDate(
java.util.Date javaDate) {
java.sql.Date sqlDate = null;
if (javaDate != null) {
sqlDate = new Date(javaDate.getTime());
}
return sqlDate;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 10:49:22
Sformatuj swoją Javę.util.Najpierw randka. Następnie użyj sformatowanej daty, aby uzyskać datę w języku java.sql.Data
java.util.Date utilDate = "Your date"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
final String stringDate= dateFormat.format(utilDate);
final java.sql.Date sqlDate= java.sql.Date.valueOf(stringDate);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 14:58:54
Tutaj przykład konwersji daty Util na datę Sql i ya jest to jeden z przykładów, który używam w moim projekcie może być dla Ciebie pomocny.
java.util.Date utilStartDate = table_Login.getDob();(orwhat ever date your give form obj)
java.sql.Date sqlStartDate = new java.sql.Date(utilStartDate.getTime());(converting date)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 10:40:02
Jestem nowicjuszem: po wielu bieganiu to zadziałało. Thought might be useful
String bufDt = bDOB.getText(); //data from form
DateFormat dF = new SimpleDateFormat("dd-MM-yyyy"); //data in form is in this format
Date bbdt = (Date)dF.parse(bufDt); // string data is converted into java util date
DateFormat dsF = new SimpleDateFormat("yyyy-MM-dd"); //converted date is reformatted for conversion to sql.date
String ndt = dsF.format(bbdt); // java util date is converted to compatible java sql date
java.sql.Date sqlDate= java.sql.Date.valueOf(ndt); // finally data from the form is convered to java sql. date for placing in database
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 08:15:24
Metoda porównywania 2 dat (util.Data lub sql.data)
public static boolean isSameDay(Date a, Date b) {
Calendar calA = new GregorianCalendar();
calA.setTime(a);
Calendar calB = new GregorianCalendar();
calB.setTime(b);
final int yearA = calA.get(Calendar.YEAR);
final int monthA = calA.get(Calendar.MONTH);
final int dayA = calA.get(Calendar.DAY_OF_YEAR);
final int yearB = calB.get(Calendar.YEAR);
final int monthB = calB.get(Calendar.MONTH);
final int dayB = calB.get(Calendar.DAY_OF_YEAR);
return yearA == yearB && monthA == monthB && dayA == dayB;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 08:38:34
Spróbuj z tym
public static String toMysqlDateStr(Date date) {
String dateForMySql = "";
if (date == null) {
dateForMySql = null;
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateForMySql = sdf.format(date);
}
return dateForMySql;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-04 12:48:20
Myślę, że najlepszym sposobem na konwersję jest:
static java.sql.Timestamp SQLDateTime(Long utilDate) {
return new java.sql.Timestamp(utilDate);
}
Date date = new Date();
java.sql.Timestamp dt = SQLDateTime(date.getTime());
Jeśli chcesz wstawić zmienną dt
do tabeli SQL możesz zrobić:
insert into table (expireAt) values ('"+dt+"');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-23 17:35:55
Używam poniższego kodu proszę go wypróbować
DateFormat fm= new SimpleDateFormatter();
Określ format daty, którą chcesz
na przykład "DD-MM_YYYY"
lub 'YYYY-mm-dd'
Następnie użyj typu danych java Date jako
fm.format("object of java.util.date");
Następnie przetworzy datę
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-12 18:40:12
Możesz użyć tej metody, aby przekonwertować datę util na datę sql,
DateUtilities.convertUtilDateToSql(java.util.Date)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-02 05:58:04
Próbowałem następujące kodowanie, które działało dobrze.
Java.util.Date utilDate = new java.util.Date ();
java.sql.Data sqlDate = new java.sql.Date (utilDate);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 12:03:36
Jeśli używasz Mysql kolumny daty można przekazać reprezentację łańcuchową tej daty
Więc używam klasy DateFormatter do sformatowania go, a następnie ustawić go jako ciąg znaków w instrukcji sql lub prepared Instrukcja
Oto ilustracja kodu:
private String converUtilDateToSqlDate(java.util.Date utilDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sqlDate = sdf.format(utilDate);
return sqlDate;
}
String date = converUtilDateToSqlDate(otherTransaction.getTransDate ());
/ / następnie podaj tę datę w poleceniu sql
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-25 21:36:52