[SQL] 자바에서 타임 스탬프의 시간 부분을 재설정
SQL자바에서 타임 스탬프의 시간 부분을 재설정
자바에서 어떻게 타임 스탬프는 특정 일의 자정을 나타내도록 00:00:00 혼자 시간 부분을 다시 설정하는 타임 스탬프를, 주어진?
T-SQL에서,이 쿼리는 동일을 달성 할 것입니다,하지만 난 자바에서이 작업을 수행하는 방법을 모르겠어요.
SELECT CAST (FLOOR (CAST (FLOAT AS GETDATE ())) AS DATETIME) AS 'DateTimeAtMidnight';
해결법
-
==============================
1.당신은 날짜 -> 캘린더 -> 세트 -> 날짜를 갈 수 있습니다 :
당신은 날짜 -> 캘린더 -> 세트 -> 날짜를 갈 수 있습니다 :
Date date = new Date(); // timestamp now Calendar cal = Calendar.getInstance(); // get calendar instance cal.setTime(date); // set cal to date cal.set(Calendar.HOUR_OF_DAY, 0); // set hour to midnight cal.set(Calendar.MINUTE, 0); // set minute in hour cal.set(Calendar.SECOND, 0); // set second in minute cal.set(Calendar.MILLISECOND, 0); // set millis in second Date zeroedDate = cal.getTime(); // actually computes the new Date
나는 자바 날짜를 사랑 해요.
당신이 실제 java.sql.Timestamps를 사용하는 경우 참고, 그들은 여분의 나노 필드가있다. 물론 일정, 맹목적으로 무시하고 다음 새 Timetamp 객체를 생성하는 데 사용할 수있는 말에 zeroedDate을 만들 때 효과적으로 떨어집니다 그래서 나노 아무것도 모른다.
나는 또한 달력 스레드로부터 안전하지 않습니다, 그래서 당신은 여러 스레드에서 호출 정적 단일 칼 인스턴스가 새 달력 인스턴스를 생성하지 않도록하는 것을 확인 할 수 있습니다 생각하지 않습니다주의해야한다.
-
==============================
2.당신이 공유지를 사용하는 경우 LANG 당신은 DateUtils.truncate를 호출 할 수 있습니다. 여기에 Javadoc 문서입니다.
당신이 공유지를 사용하는 경우 LANG 당신은 DateUtils.truncate를 호출 할 수 있습니다. 여기에 Javadoc 문서입니다.
그것은 @ 알렉스 밀러가해야 할 말했다 같은 일을한다.
-
==============================
3.신기원의 시작 (1970 년 1 월 1 일) 이후 밀리 초 단위로 표시되는 java.util.Date, 당신의 "타임 스탬프를"있는 가정하면, 다음과 같은 연산을 수행 할 수 있습니다 :
신기원의 시작 (1970 년 1 월 1 일) 이후 밀리 초 단위로 표시되는 java.util.Date, 당신의 "타임 스탬프를"있는 가정하면, 다음과 같은 연산을 수행 할 수 있습니다 :
public static Date stripTimePortion(Date timestamp) { long msInDay = 1000 * 60 * 60 * 24; // Number of milliseconds in a day long msPortion = timestamp.getTime() % msInDay; return new Date(timestamp.getTime() - msPortion); }
-
==============================
4.나는이 솔루션을 선호 :
나는이 솔루션을 선호 :
GregorianCalendar now = new GregorianCalendar(); GregorianCalendar calendar = new GregorianCalendar( now.get(GregorianCalendar.YEAR), now.get(GregorianCalendar.MONTH), now.get(GregorianCalendar.DAY_OF_MONTH));
-
==============================
5.이 작업을 수행
이 작업을 수행
import org.apache.commons.lang.time.DateUtils; Date myDate = new Date(); System.out.println(myDate); System.out.println(DateUtils.truncate(myDate, Calendar.DATE));
출력은
수요일 3월 19일 태평양 서머 타임 14시 16분 47초 2014 수요일 3월 19일 태평양 서머 타임 00시 00분 0초 2014
-
==============================
6.나는 많은 날짜 시간 조작을하지 않기 때문에,이 힘은 그것을 할 수있는 가장 좋은 방법이 될 수 없습니다. 나는 달력을 산란하고 소스로 날짜를 사용합니다. 그런 다음 0으로 시간, 분, 초를 설정하고 날짜로 다시 변환합니다. 하지만, 더 나은 방법을 볼 것이 좋을 것이다.
나는 많은 날짜 시간 조작을하지 않기 때문에,이 힘은 그것을 할 수있는 가장 좋은 방법이 될 수 없습니다. 나는 달력을 산란하고 소스로 날짜를 사용합니다. 그런 다음 0으로 시간, 분, 초를 설정하고 날짜로 다시 변환합니다. 하지만, 더 나은 방법을 볼 것이 좋을 것이다.
-
==============================
7.certanly 솔루션 "이 책에서"이 될 것이라고는 Calendar.set ()를 사용하여,하지만 당신은 또한 java.sql.Date을 사용할 수 있습니다 :
certanly 솔루션 "이 책에서"이 될 것이라고는 Calendar.set ()를 사용하여,하지만 당신은 또한 java.sql.Date을 사용할 수 있습니다 :
java.util.Date originalDate = new java.util.Date(); java.sql.Date wantedDate = new java.sql.Date(originalDate.getTime());
그게 정확히부터 원하는 것을 할 것입니다 :
java.sql.Date은 java.util.Date를 확장 때문에, 당신은 자유롭게 등으로 사용할 수 있습니다. 당신이 할 이유가 없습니다 java.sql.Date에서 다른 java.util.Date을 만들 것을 -하지만 wantedDate.getTime ()가 원래의 타임 스탬프를 검색 할 것이라는 점을 알고 있어야합니다!
-
==============================
8.Joda 시간과 지원 시간대를 사용하는 솔루션을 검색 할 수 있습니다. 그래서, 당신은 JVM에서 현재 구성된 시간대에 현재 날짜와 시간 (하는 currentDate 및 currentTime을에) 또는 (informedDate 및 informedTime에) 당신이 통보 약간의 날짜와 시간을 얻을 것이다.
Joda 시간과 지원 시간대를 사용하는 솔루션을 검색 할 수 있습니다. 그래서, 당신은 JVM에서 현재 구성된 시간대에 현재 날짜와 시간 (하는 currentDate 및 currentTime을에) 또는 (informedDate 및 informedTime에) 당신이 통보 약간의 날짜와 시간을 얻을 것이다.
또한 정보 용 아래의 코드는 정보를 날짜 / 시간은 미래 (가변 스케줄)에있는 경우.
Joda 시간 윤초를 지원하지 않습니다주십시오 사항. 그래서, 당신은 진정한 가치 떨어져 일부 26 27초 될 수 있습니다. 누적 된 오류가 가까이 1 분에있을 것이다 사람들이 그것에 대해 신경을 시작할 때 이것은 아마 단지, 향후 50 년 안에 해결 될 것입니다.
참조 : https://en.wikipedia.org/wiki/Leap_second
/** * This class splits the current date/time (now!) and an informed date/time into their components: * <lu> * <li>schedulable: if the informed date/time is in the present (now!) or in future.</li> * <li>informedDate: the date (only) part of the informed date/time</li> * <li>informedTime: the time (only) part of the informed date/time</li> * <li>currentDate: the date (only) part of the current date/time (now!)</li> * <li>currentTime: the time (only) part of the current date/time (now!)</li> * </lu> */ public class ScheduleDateTime { public final boolean schedulable; public final long millis; public final java.util.Date informedDate; public final java.util.Date informedTime; public final java.util.Date currentDate; public final java.util.Date currentTime; public ScheduleDateTime(long millis) { final long now = System.currentTimeMillis(); this.schedulable = (millis > -1L) && (millis >= now); final TimeZoneUtils tz = new TimeZoneUtils(); final java.util.Date dmillis = new java.util.Date( (millis > -1L) ? millis : now ); final java.time.ZonedDateTime zdtmillis = java.time.ZonedDateTime.ofInstant(dmillis.toInstant(), java.time.ZoneId.systemDefault()); final java.util.Date zdmillis = java.util.Date.from(tz.tzdate(zdtmillis)); final java.util.Date ztmillis = new java.util.Date(tz.tztime(zdtmillis)); final java.util.Date dnow = new java.util.Date(now); final java.time.ZonedDateTime zdtnow = java.time.ZonedDateTime.ofInstant(dnow.toInstant(), java.time.ZoneId.systemDefault()); final java.util.Date zdnow = java.util.Date.from(tz.tzdate(zdtnow)); final java.util.Date ztnow = new java.util.Date(tz.tztime(zdtnow)); this.millis = millis; this.informedDate = zdmillis; this.informedTime = ztmillis; this.currentDate = zdnow; this.currentTime = ztnow; } } public class TimeZoneUtils { public java.time.Instant tzdate() { final java.time.ZonedDateTime zdtime = java.time.ZonedDateTime.now(); return tzdate(zdtime); } public java.time.Instant tzdate(java.time.ZonedDateTime zdtime) { final java.time.ZonedDateTime zddate = zdtime.truncatedTo(java.time.temporal.ChronoUnit.DAYS); final java.time.Instant instant = zddate.toInstant(); return instant; } public long tztime() { final java.time.ZonedDateTime zdtime = java.time.ZonedDateTime.now(); return tztime(zdtime); } public long tztime(java.time.ZonedDateTime zdtime) { final java.time.ZonedDateTime zddate = zdtime.truncatedTo(java.time.temporal.ChronoUnit.DAYS); final long millis = zddate.until(zdtime, java.time.temporal.ChronoUnit.MILLIS); return millis; } }
-
==============================
9.다음은 주요 예를 들어 간단한 기능이다 :
다음은 주요 예를 들어 간단한 기능이다 :
import java.util.Calendar; import java.util.Date; public class Util { /** * Returns an imprecise date/timestamp. * @param date * @return the timestamp with zeroized seconds/milliseconds */ public static Date getImpreciseDate(Date date) { Calendar cal = Calendar.getInstance(); // get calendar instance cal.setTime(date);// set cal to date cal.set(Calendar.SECOND, 0); // zeroize seconds cal.set(Calendar.MILLISECOND, 0); // zeroize milliseconds return cal.getTime(); } public static void main(String[] args){ Date now = new Date(); now.setTime(System.currentTimeMillis()); // set time to now System.out.println("Precise date: " + Util.getImpreciseDate(now)); System.out.println("Imprecise date: " + Util.getImpreciseDate(now)); } }
-
==============================
10.캘린더를 사용 답변도 유효하지만 그냥 자바-8에 대한 대답을 넣어 위해 노력하지만, 사람들이 많이 더 이상 그 클래스를 사용하고 있지 않습니다.
캘린더를 사용 답변도 유효하지만 그냥 자바-8에 대한 대답을 넣어 위해 노력하지만, 사람들이 많이 더 이상 그 클래스를 사용하고 있지 않습니다.
SO는 java.time.ZonedDateTime &의 java.sql.Timestamp 사이의 변환을 이해하기 위해이 &이 답변을 참조하십시오
당신은 단순히 일 및 타임 스탬프로 재 변환의 뒷면에 ZonedDateTime을자를 수 있습니다
Timestamp.valueOf(ZonedDateTime.now().truncatedTo(ChronoUnit.DAYS).toLocalDateTime())
from https://stackoverflow.com/questions/227007/resetting-the-time-part-of-a-timestamp-in-java by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] INET_ATON ()와 PHP의 INET_NTOA ()? (0) | 2020.06.26 |
---|---|
[SQL] 인덱스 및 다중 열 기본 키 (0) | 2020.06.26 |
[SQL] 이미 데이터가있는 MySQL 데이터베이스 필드에 데이터를 추가 (0) | 2020.06.26 |
[SQL] ORDER BY "ENUM 필드"MYSQL에서 (0) | 2020.06.26 |
[SQL] 행 번호는 SQL 쿼리의 결과 집합에 추가 (0) | 2020.06.26 |