TimeStamp를 Java에서 날짜로 변환하는 방법은 무엇입니까?
date
Java에서 얻은 후 'timeStamp'를 어떻게 변환 합니까?
내 현재 코드는 다음과 가변합니다.
public class GetCurrentDateTime {
public int data() {
int count = 0;
java.sql.Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
java.sql.Date date = new java.sql.Date(timeStamp.getTime());
System.out.println(date);
//count++;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/pro", "root", "");
PreparedStatement statement = con.prepareStatement("select * from orders where status='Q' AND date=CURDATE()");
ResultSet result = statement.executeQuery();
while (result.next()) {
// Do something with the row returned.
count++; //if the first col is a count.
}
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
return count;
}
}
이 내 데이터베이스입니다.
여기서 내가 얻은 출력은 2012-08-07 0이지만 동등한 쿼리는 3을 반환합니다. 왜 0을 얻었습니까?
Date
스탬프의 getTime()
값을 매개 변수로 사용하여 새 개체를 만드십시오 .
다음은 예제입니다 (현재 시간의 예제 타임 스탬프 사용).
Timestamp stamp = new Timestamp(System.currentTimeMillis());
Date date = new Date(stamp.getTime());
System.out.println(date);
// timestamp to Date
long timestamp = 5607059900000; //Example -> in ms
Date d = new Date(timestamp );
// Date to timestamp
long timestamp = d.getTime();
//If you want the current timestamp :
Calendar c = Calendar.getInstance();
long timestamp = c.getTimeInMillis();
다만 :
Timestamp timestamp = new Timestamp(long);
Date date = new Date(timestamp.getTime());
나는 오랫동안 보유하고 있었는데 Eposh 변환기 가 수행한다는 것이 발견 되었습니다 .
long epoch = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse("01/01/1970 01:00:00").getTime() / 1000;
또는 그 반대 :
String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
tl; 박사
LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
.atStartOfDay( ZoneId.of( "Africa/Tunis" ) )
.toEpochSecond()
…
LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
.plusDays( 1 )
.atStartOfDay( ZoneId.of( "Africa/Tunis" ) )
.toEpochSecond()
…
"SELECT * FROM orders WHERE placed >= ? AND placed < ? ; "
…
myPreparedStatement.setObject( 1 , start )
myPreparedStatement.setObject( 2 , stop )
java.time
최신 java.time 클래스로 대체되어 현재 레거시가 된 성가신 오래된 날짜 시간 클래스를 사용하고 있습니다.
분명히 당신은 데이터베이스에 정수 유형의 열에 순간을 저장하고 있습니다. 그것은 불행한 일입니다. 대신 SQL-standard와 같은 유형의 열을 사용해야합니다 TIMESTAMP WITH TIME ZONE
. 그러나이 답변을 위해 우리는 우리가 가진 것을 가지고 일할 것입니다.
기록이 밀리 초 단위의 순간을 나타내며 하루 종일 모든 기록을 원하면 시간 범위가 필요합니다. 우리는 시작 순간과 중지 순간이 있어야합니다. 쿼리에는 쌍을 가져야하는 단일 날짜-시간 기준 만 있습니다.
LocalDate
클래스는 시간이 하루의 시간 영역없이없이 날짜 만 값을 나타냅니다.
날짜를 결정하는 데 중요합니다. 주어진 순간에 날짜는 지역별로 전 세계적으로 나열되어 있습니다. 예를 들어, 파리 에서 자정 이후 몇 분이 지나면 프랑스 는 몬트리올 퀘벡 에서는 여전히 '어제'인 새로운 날 입니다.
존재하지 않는 경우 JVM은 현재 기본 제공되지 않는 경우 적용됩니다. 이 경우에는 변경 될 수 있습니다. 원하는 / 예상 제시를 명시 적으로 인수로 지정하는 것이 좋습니다.
지정 적절한 시간대 이름 의 형식 continent/region
예컨대, , , 또는 . 또는 과 같은 3 ~ 4 약어 자 는 표준 시간대 가 아니고 , 표준화되지 않았으며, 고유하지도 않은 (!)이므로 사용하지 마십시오.America/Montreal
Africa/Casablanca
Pacific/Auckland
EST
IST
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
JVM의 현재 기본 시간대를 사용하려면 요청하고 인수로 전달하십시오. 생략하면 JVM의 현재 기본값이 내재적으로 적용됩니다. 기본값은 JVM 내의 모든 앱 스레드에있는 코드에 의해 런타임 중에 언제든지 변경 될 수 있으므로 명시하는 것이 좋습니다.
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
또는 날짜를 지정하십시오. 월을 숫자로 설정할 수 있으며 1 월부터 12 월까지 1 ~ 12 번의 정상적인 번호를 지정할 수 있습니다.
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
또는 Month
연중 매월 하나씩 미리 정의 된 열거 형 개체를 사용하는 것이 좋습니다 . 팁 : Month
단순한 정수 대신 코드베이스 전체에서 이러한 객체를 사용하여 코드를보다 자체적으로 문서화하고 유효한 값을 보장하며 유형 안전성을 제공하십시오 .
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
A를 LocalDate
손에, 우리는 다음 필요가 순간 하루의 시작과 정지 한 쌍으로 그 변환합니다. 하루가 시간이 00:00:00에 시작된다고 가정하지 마십시오. 일광 절약 시간 (DST)과 같은 예외로 인해 하루가 01:00:00과 같은 다른 시간에 시작될 수 있습니다. 따라서 java.time이 하루의 첫 번째 순간을 결정하도록합니다. 우리는 그러한 이상을 찾기 위해 ZoneId
인수를 전달합니다 LocalDate::atStartOfDay
. 결과는 ZonedDateTime
.
ZonedDateTime zdtStart = ld.atStartOfDay( z ) ;
일반적으로 시간 범위를 정의하는 가장 좋은 방법은 시작은 포함 하고 끝은 배타적 인 Half-Open 접근 방식 입니다 . 따라서 하루는 첫 번째 순간부터 시작하여 다음 날의 첫 번째 순간까지 이어집니다.
ZonedDateTime zdtStop = ld.plusDays( 1 ).atStartOfDay( z ) ; // Determine the following date, and ask for the first moment of that day.
하루 종일 쿼리는 SQL 명령을 사용할 수 없습니다 BETWEEN
. 이 명령은 완전히 닫힘 ( []
) (시작과 끝 모두 포함)이며 반 개방 ( [)
)을 원합니다 . 우리는 한 쌍의 기준 >=
과 <
.
열 이름이 잘못되었습니다. 다양한 데이터베이스에 예약 된 천 단어를 피하십시오. placed
이 예제 에서 사용합시다 .
코드는 ?
순간을 지정 하는 자리 표시자를 사용해야합니다 .
String sql = "SELECT * FROM orders WHERE placed >= ? AND placed < ? ; " ;
그러나 우리는 ZonedDateTime
객체를 가지고 있고, 데이터베이스는 위에서 논의한 것처럼 정수를 저장하고 있습니다. 당신이 경우 한 당신의 열을 정의 제대로 우리는 간단하게 전달할 수 ZonedDateTime
나중에 JDBC 4.2을 지원하는 모든 JDBC 드라이버 객체.
그러나 대신에 우리는 전체 초 단위로 epoch로부터 카운트를 얻어야합니다. 나는 당신의 시대 기준 날짜가 UTC로 1970 년의 첫 번째 순간이라고 가정 할 것입니다. ZonedDateTime
클래스는 나노초 해상도를 지원 하므로 데이터 손실 가능성에주의하십시오 . 분수 초는 다음 줄에서 잘립니다.
long start = zdtStart().toEpochSecond() ; // Transform to a count of whole seconds since 1970-01-01T00:00:00Z.
long stop = zdtStop().toEpochSecond() ;
이제 위에서 정의한 SQL 코드에이 정수를 전달할 준비가되었습니다.
PreparedStatement ps = con.prepareStatement( sql );
ps.setObject( 1 , start ) ;
ps.setObject( 2 , stop ) ;
ResultSet rs = ps.executeQuery();
에서 정수 값을 검색 할 때 객체 (항상 UTC) 또는 객체 (시간대 할당 ) ResultSet
로 변환 할 수 있습니다 .Instant
ZonedDateTime
Instant instant = rs.getObject( … , Instant.class ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
java.time 정보
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스의 최신 버전의 Android 번들 구현.
- 이전 Android의 경우 ThreeTenABP 프로젝트는 ThreeTen-Backport를 채택합니다 (위에서 언급). ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
우선 .NET Framework 사용의 이점을 활용하고 있지 않습니다 PreparedStatement
. 먼저 PreparedStatement
다음과 같이 수정하는 것이 좋습니다 .
PreparedStatement statement = con.prepareStatement("select * from orders where status=? AND date=?")
그런 다음을 사용 statement.setXX(param_index, param_value)
하여 각 값을 설정할 수 있습니다 . 로 변환 timestamp
하려면 다음 javadocs를 살펴보십시오.
PreparedStatement.setTimeStamp ()
타임 스탬프
도움이 되었기를 바랍니다!
쿼리에서 무엇을 선택하려고하는지 확실하지 않지만 UNIX_TIMESTAMP()
인수 없이는 지금 시간을 반환합니다. 인수로 유효한 시간을 제공하거나 조건을 변경해야합니다.
편집하다:
다음은 질문에 기반한 시간 제한 쿼리의 예입니다.
PreparedStatement statement = con
.prepareStatement("select * from orders where status='Q' AND date > ?");
Date date = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2000");
statement.setDate(1, new java.sql.Date(date.getTime()));
편집 : 타임 스탬프 열
타임 스탬프 사용 java.sql.Timestamp
및 PreparedStatement.setTimestamp ()의 경우 , 즉 :
PreparedStatement statement = con
.prepareStatement("select * from orders where status='Q' AND date > ?");
Date date = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2000");
Timestamp timestamp = new Timestamp(date.getTime());
statement.setTimestamp(1, timestamp);
new Date(timestamp.getTime())
작동해야하지만 새로운 멋진 Java 8 방식 (더 우아하고 형식이 안전 할뿐만 아니라 새로운 시간 클래스를 사용하는 데 도움이 될 수 있음)은를 호출하는 것 Date.from(timestamp.toInstant())
입니다.
( Timestamp
자체가의 인스턴스 라는 사실에 의존하지 마십시오 . 다른 답변Date
의 설명에서 설명을 참조하십시오 .)
Timestamp tsp = new Timestamp(System.currentTimeMillis());
java.util.Date dateformat = new java.util.Date(tsp.getTime());
Android에서는 매우 간단합니다. Calender 클래스를 사용하여 currentTimeMillis를 가져옵니다.
Timestamp stamp = new Timestamp(Calendar.getInstance().getTimeInMillis());
Date date = new Date(stamp.getTime());
Log.d("Current date Time is " +date.toString());
Java에서는 System.currentTimeMillis ()를 사용하여 현재 타임 스탬프를 얻습니다.
다른 답변은 실제 응용 프로그램이 감당할 수없는 시간대에 구애받지 않는 것처럼 보이므로 응답해야한다고 생각합니다. 타임 스탬프와 JVM이 다른 시간대를 사용할 때 타임 스탬프-날짜 변환을 올바르게하려면 다음과 같이 Joda Time의 LocalDateTime (또는 Java8의 LocalDateTime)을 사용할 수 있습니다.
Timestamp timestamp = resultSet.getTimestamp("time_column");
LocalDateTime localDateTime = new LocalDateTime(timestamp);
Date trueDate = localDateTime.toDate(DateTimeZone.UTC.toTimeZone());
아래 예에서는 타임 스탬프가 UTC라고 가정합니다 (일반적으로 데이터베이스의 경우). 타임 스탬프가 다른 시간대에있는 경우 toDate
문의 timezone 매개 변수를 변경합니다 .
이 자바 코드를 사용해보십시오.
enter code here
Timestamp stamp = new Timestamp(System.currentTimeMillis());
Date date = new Date(stamp.getTime());
DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
DateFormat f1 = new SimpleDateFormat("yyyy/MM/dd");
String d=f.format(date);
String d1=f1.format(date);
System.out.println(d);
System.out.println(d1);
기존 항목이 있다고 가정합니다 java.util.Date date
.
Timestamp timestamp = new Timestamp(long);
date.setTime( l_timestamp.getTime() );
이 방법을 사용하여 특정 지역의 타임 스탬프 및 시간대에서 날짜를 가져올 수 있습니다.
public String getDayOfTimestamp(long yourLinuxTimestamp, String timeZone) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(yourLinuxTimestamp * 1000);
cal.setTimeZone(TimeZone.getTimeZone(timeZone));
Date date = cal.getTime();
}
String timestamp="";
Date temp=null;
try {
temp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(getDateCurrentTimeZone(Long.parseLong(timestamp)));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int dayMonth=temp.getDate();
int dayWeek=temp.getDay();
int hour=temp.getHours();
int minute=temp.getMinutes();
int month=temp.getMonth()+1;
int year=temp.getYear()+1900;
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Date fecha = getDateInTimestamp();
참고 URL : https://stackoverflow.com/questions/11839246/how-to-convert-timestamp-to-date-in-java
'IT' 카테고리의 다른 글
Python에서 순환 가져 오기 오기를 피하는 방법은 무엇입니까? (0) | 2020.08.27 |
---|---|
첫 번째 마이너스와 마지막 마이너스의 CSS 선택기 (0) | 2020.08.27 |
node.js에서 어디에서 있습니까의 sha1 해시를 어떻게 얻을 수 있습니까? (0) | 2020.08.27 |
전체 화면 Java의 JFrame (0) | 2020.08.27 |
한 활동의 값을 이전 활동으로 전달하는 방법 (0) | 2020.08.27 |