새 Date
객체를 만들면 현재 시간으로 현지 시간대로 초기화됩니다. GMT에서 현재 날짜와 시간을 어떻게 알 수 있습니까?
Date
그래서 시간대를 보유하지 "하지만 로컬 시간대에서"(최고 또는 부정확 한) 정확하지 않습니다를 참조하십시오. 모두 java.util.Date에 대해 .
새 Date
객체를 만들면 현재 시간으로 현지 시간대로 초기화됩니다. GMT에서 현재 날짜와 시간을 어떻게 알 수 있습니까?
Date
그래서 시간대를 보유하지 "하지만 로컬 시간대에서"(최고 또는 부정확 한) 정확하지 않습니다를 참조하십시오. 모두 java.util.Date에 대해 .
답변:
java.util.Date
UTC와 관련하여 가장 일반적으로 생각되지만 특정 시간대는 없습니다. 그것이 현지 시간이라고 생각하는 이유는 무엇입니까?
정확히 말하면 a 내의 값 java.util.Date
은 UTC 1970 년 1 월 1 일 자정에 발생한 유닉스 시대 이후의 밀리 초입니다. 동일한 시간대는 다른 시간대에서도 설명 할 수 있지만 일반적인 설명은 UTC를 기준으로합니다. 고정 된 에포크 (epoch) 이후 수 밀리 초이므로java.util.Date
현지 시간대와 상관없이 특정 순간에 전세계 이 동일합니다.
문제는 현지 시간대를 사용하는 캘린더 인스턴스를 사용하거나 현지 시간대를 사용하는 캘린더 인스턴스를 통해 Date.toString()
또는SimpleDateFormat
인스턴스 기본적으로 입니다.
이것이 문제가되지 않으면 샘플 코드를 게시하십시오.
그러나 어쨌든 훨씬 명확한 API를 제공하는 Joda-Time 을 사용하는 것이 좋습니다 .
java.util.Timestamp
(또는 java.util.Date
)을 서버 시간대 로 변환합니다 .
System.out.println(new Date())
나요? 그렇다면 toString()
시간대를 적용하는 방법 이라는 것을 알고 있어야합니다 . 그렇지 않은 경우 자세한 내용을 알려주십시오.
toString()
항상 기본 시간대를 사용합니다. date.getTime()
유닉스 시대 이후로 밀리 초를 확실히 반환합니다 (UTC). 이 말을 가장 정확 Date
자체가 전혀 시간대가 없습니다 - 그것의 단지 여러 시간대에 간주 될 수있는 시간에 순간. 그러나 인스턴스를 생성 할 때는 시간대에 의존 하지 않습니다 .
Instant.now() // Capture the current moment in UTC.
해당 값을 나타내는 문자열을 생성하십시오.
Instant.now().toString()
2016-09-13T23 : 30 : 52.123Z
으로 존 소총으로 정답 언급하는 java.util.Date 객체는 없습니다 어떤 시간대를 † . 그러나 해당 toString
구현은 해당 날짜-시간 값의 문자열 표현을 생성 할 때 JVM의 기본 시간대를 적용합니다. 순진한 프로그래머에게는 혼란스럽게도 Date 에는 시간대가있는 것 같지만 그렇지 않습니다.
java.util.Date
, j.u.Calendar
그리고 java.text.SimpleDateFormat
자바와 함께 번들 클래스는 악명 골칫거리입니다. 피하십시오. 대신, 유능한 날짜 / 시간 라이브러리 중 하나를 사용하십시오.
Java 8 은 뛰어난 java.time. * 패키지 를 제공하여 이전 java.util.Date/Calendar 클래스를 대체합니다.
UTC / GMT로 현재 시간을 얻는 것은 간단한 일 라이너입니다…
Instant instant = Instant.now();
이 Instant
클래스는 java.time의 기본 빌딩 블록으로, 나노초 의 해상도로 UTC 의 타임 라인의 순간을 나타냅니다 .
Java 8에서는 현재 순간이 최대 밀리 초 해상도로 캡처됩니다. 자바 9 신선한 구현 제공 의 Clock
호스트 컴퓨터의 시계 하드웨어의 능력에 따라,이 클래스의 전체 나노초 능력을 최대로 캡처에게 현재의 순간을.
이 toString
메소드는 하나의 특정 ISO 8601 형식을 사용하여 해당 값의 문자열 표현을 생성 합니다 . 이 형식 은 초 를 나타내는 데 필요한 0, 3, 6 또는 9 자리 숫자 ( 밀리 초 , 마이크로 초 또는 나노초 )를 출력합니다.
보다 유연한 서식 또는 기타 추가 기능을 원하면 UTC 자체 ( ZoneOffset.UTC
constant )에 대해 UTC에서 오프셋을 0으로 적용하여을 얻습니다 OffsetDateTime
.
OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );
콘솔로 덤프…
System.out.println( "now.toString(): " + now );
달릴 때…
now.toString(): 2014-01-21T23:42:03.522Z
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310 입니다.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이 필요없고 수업이 필요 없습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
업데이트 : Joda-Time 현재 유지 관리 모드 인 프로젝트 는 java.time 클래스 로의 마이그레이션을 권장 합니다.
은 Using Joda 타임 자유의 선정 3 자 오픈 소스 라이브러리, 당신은 코드의 한 라인에 현재 날짜와 시간을 얻을 수 있습니다.
Joda-Time은 Java 8의 새로운 java.time. * 클래스에 영감을 주었지만 아키텍처는 다릅니다. 이전 버전의 Java에서는 Joda-Time을 사용할 수 있습니다. Joda-Time은 Java 8에서 계속 작동하며 지속적으로 관리되고 있습니다 (2014 년 기준). 그러나 Joda-Time 팀은 java.time으로의 마이그레이션을 권장합니다.
System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );
더 자세한 예제 코드 (Joda-Time 2.3)…
org.joda.time.DateTime now = new org.joda.time.DateTime(); // Default time zone.
org.joda.time.DateTime zulu = now.toDateTime( org.joda.time.DateTimeZone.UTC );
콘솔로 덤프…
System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );
달릴 때…
Local time in ISO 8601 format: 2014-01-21T15:34:29.933-08:00
Same moment in UTC (Zulu): 2014-01-21T23:34:29.933Z
표준 시간대 작업을 수행하는 코드 예를 더 보려면 는 비슷한 질문에 대한 내 대답 을 .
JVM의 현재 기본 시간대 (임시 변경 가능)에 내재적으로 의존하지 않고 항상 시간대를 지정하는 것이 좋습니다. 이러한 의존은 날짜 시간 작업의 혼란과 버그의 일반적인 원인 인 것 같습니다.
호출 할 때 now()
할당 할 원하는 / 예상 시간대를 전달하십시오. DateTimeZone
수업을 사용하십시오 .
DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );
이 클래스는 UTC 시간대에 대한 상수를 보유합니다 .
DateTime now = DateTime.now( DateTimeZone.UTC );
JVM의 현재 기본 시간대를 실제로 사용하려면 코드가 자체 문서화되도록 명시 적으로 호출하십시오.
DateTimeZone zoneDefault = DateTimeZone.getDefault();
ISO 8601 형식 에 대해 읽어보십시오 . java.time 및 Joda-Time 모두 해당 표준의 합리적인 형식을 문자열 구문 분석 및 생성에 대한 기본값으로 사용합니다.
† 실제로 java.util.Date 에는 표준 시간대 가 있으며 소스 코드 계층 아래에 묻혀 있습니다. 대부분의 실제적인 목적으로 해당 시간대는 무시됩니다. 간단히 말해서, 우리는 java.util.Date에 시간대가 없다고 말합니다. 또한, 그 매장 시간대는 Date의 방법에 의해 사용되는 시간대가 아닙니다toString
. 이 메소드는 JVM의 현재 기본 시간대를 사용합니다. 이 혼란스러운 클래스를 피하고 Joda-Time 및 java.time을 고수하는 더 많은 이유.
DateTime.now().toDateTime(DateTimeZone.UTC)
내가 찾던 것이 었습니다! 감사!
DateTime nowUtc = DateTime.now ( DateTimeZone.UTC ) ;
2014-01-21T15:34:29.933-08:00
사용한 예제에서 Pure Java 8로이를 얻는 방법new org.joda.time.DateTime()
ZonedDateTime.now( ZoneId.of( "America/Los_Angeles" ) ).truncatedTo( ChronoUnit.MILLIS ).toOffsetDateTime().toString()
지정된 시간대에 대한 현재 순간을 얻습니다. 다음으로, 마이크로 / 나노를 제거하십시오. 그런 다음 본격적인 시간대 (UTC의 사람들이 사용한 오프셋의 과거, 현재 및 미래의 변경 내역)가 아닌 단순한 UTC에서 오프셋 (시간-분-초)만으로 변환합니다. 특정 지역). 마지막으로, 메소드 OffsetDateTime
에서 기본적으로 사용되는 표준 ISO 8601 형식 에 따라 값을 나타내는 텍스트를 생성합니다 toString
.
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
//Local time zone
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
이것은 확실히 UTC 시간을 String 및 Date 객체로 반환합니다!
static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static Date getUTCdatetimeAsDate() {
// note: doesn't check for null
return stringDateToDate(getUTCdatetimeAsString());
}
public static String getUTCdatetimeAsString() {
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
public static Date stringDateToDate(String StrDate) {
Date dateToReturn = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
try {
dateToReturn = (Date)dateFormat.parse(StrDate);
}
catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss";
new Date()
장치 시간이 잘못된 경우 호출 은 올바른 UTC 시간을 반환하지 않습니다.
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
실제로 시간은 아니지만 표현이 바뀔 수 있습니다.
SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
시간은 지구 어느 곳에서나 동일하지만 시간에 대한 인식은 위치에 따라 다를 수 있습니다.
캘린더 aGMTCalendar = Calendar.getInstance (TimeZone.getTimeZone ( "GMT")); 그런 다음 aGMTCalendar 객체를 사용하여 수행 된 모든 작업은 GMT 시간대로 수행되며 일광 절약 시간제 또는 고정 오프셋이 적용되지 않습니다.
잘못된!
Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()
과
Calendar aNotGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));aNotGMTCalendar.getTime();
같은 시간에 반환됩니다. 에 대한
new Date(); //it's not GMT.
이 코드는 현재 시간 UTC를 인쇄합니다.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class Test
{
public static void main(final String[] args) throws ParseException
{
final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
}
}
결과
2013-10-26 14:37:48 UTC
Jon Skeet의 답변 에서 잘못된 것 같습니다 . 그는 말했다 :
java.util.Date
항상 UTC입니다. 그것이 현지 시간이라고 생각하는 이유는 무엇입니까? 문제는 현지 시간대를 사용하는 캘린더 인스턴스를 사용하거나 현지 시간대를 사용하는 캘린더 인스턴스를 통해 표시하는 것Date.toString()
입니다.
그러나 코드 :
System.out.println(new java.util.Date().getHours() + " hours");
no Calendar
와 no SimpleDateFormat
를 사용하여 GMT (UTC 시간)가 아닌 현지 시간을 제공합니다 .
그래서 무언가가 잘못된 것 같습니다.
응답을 종합하면 코드는 다음과 같습니다.
System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
.get(Calendar.HOUR_OF_DAY) + " Hours");
은 현지 시간 대신 GMT 시간을 표시합니다. 이론적으로 날짜를 GMT에 저장하지만 현지 시간대로 시간을 되 돌리는 개체를 getTime.getHours()
생성하기 때문에 누락되었습니다 Date()
.
Date.getHours()
방법에 대한 설명서를 읽으면 다음과 같이 명확하게 알 수 있습니다. "반환 된 값은 다음을 포함하거나 그로 시작하는 하루 내의 시간을 나타내는 숫자 (0-23)입니다. 현지 시간대로 해석 되는이 Date 객체가 나타내는 시간 . " (Emphasis mine.) getHours()
현지 시간대 내의 값을 해석 하는 방법입니다 Date
. 객체 자체 의 상태가 아닙니다 .
toString
및 getHours
자신의 출력에 기본 시간대를 적용합니다. 따라서 나이브 프로그래머는 Date에 시간대가있는 것처럼 보이지만 실제로는 그렇지 않습니다.
필드가 UTC로 조정 된 Date 객체를 원한다면 Joda Time으로 다음 과 같이 할 수 있습니다 .
import org.joda.time.DateTimeZone;
import java.util.Date;
...
Date local = new Date();
System.out.println("Local: " + local);
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
System.out.println("UTC: " + new Date(utc));
.toDateTime
메소드를 호출하고 UTC 시간대의 상수를 전달하십시오.
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));
와:
Calendar cal = Calendar.getInstance();
그런 다음 cal
현재 날짜와 시간을 갖습니다.
다음을 사용하여 시간대의 현재 날짜 및 시간을 얻을 수도 있습니다.
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));
cal.get(Calendar.DATE);
다른 세부 정보에 대해 일정이나 다른 상수를 요청할 수 있습니다.
날짜 및 타임 스탬프는 Java에서 더 이상 사용되지 않습니다. 캘린더 클래스가 아닙니다.
특정 시간대 및 특정 형식으로 시스템 시간을 렌더링하는 샘플 코드.
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class TimZoneTest {
public static void main (String[] args){
//<GMT><+/-><hour>:<minutes>
// Any screw up in this format, timezone defaults to GMT QUIETLY. So test your format a few times.
System.out.println(my_time_in("GMT-5:00", "MM/dd/yyyy HH:mm:ss") );
System.out.println(my_time_in("GMT+5:30", "'at' HH:mm a z 'on' MM/dd/yyyy"));
System.out.println("---------------------------------------------");
// Alternate format
System.out.println(my_time_in("America/Los_Angeles", "'at' HH:mm a z 'on' MM/dd/yyyy") );
System.out.println(my_time_in("America/Buenos_Aires", "'at' HH:mm a z 'on' MM/dd/yyyy") );
}
public static String my_time_in(String target_time_zone, String format){
TimeZone tz = TimeZone.getTimeZone(target_time_zone);
Date date = Calendar.getInstance().getTime();
SimpleDateFormat date_format_gmt = new SimpleDateFormat(format);
date_format_gmt.setTimeZone(tz);
return date_format_gmt.format(date);
}
}
산출
10/08/2011 21:07:21
at 07:37 AM GMT+05:30 on 10/09/2011
at 19:07 PM PDT on 10/08/2011
at 23:07 PM ART on 10/08/2011
이것을 간단하게 만들기 위해 Date
in 을 만들려면 UTC
다음을 사용할 수 있습니다 Calendar
.
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Calendar
"UTC"사용을 위한 새로운 인스턴스를 생성 할 것입니다 TimeZone
.
Date
해당 캘린더 의 객체 가 필요한 경우을 사용할 수 있습니다 getTime()
.
UTC로 현재 날짜 시간 변환 :
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTimeZone dateTimeZone = DateTimeZone.getDefault(); //Default Time Zone
DateTime currDateTime = new DateTime(); //Current DateTime
long utcTime = dateTimeZone.convertLocalToUTC(currDateTime .getMillis(), false);
String currTime = formatter.print(utcTime); //UTC time converted to string from long in format of formatter
currDateTime = formatter.parseDateTime(currTime); //Converted to DateTime in UTC
toString
을 얻으려면 DateTime을 호출하십시오 . (b) 시간대간에 변환하기에 너무 많은 코드. "toDateTime"을 호출하고 시간대 개체를 전달하십시오. 이와 같이 : . 특정 시간대의 경우 적절한 이름을 기준으로 시간대 개체를 인스턴스화하고 전달 하십시오 . myDateTime.toDateTime( DateTimeZone.UTC )
myDateTime.toDateTime( DateTimeZone.forID( "Asia/Tehran" ) )
이것은 나를 위해 일했으며 GMT의 타임 스탬프를 반환합니다!
Date currDate;
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
long currTime = 0;
try {
currDate = dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
currTime = currDate.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
온라인 NTP 서버에서 올바른 UTC 시간을 얻으려면이 클래스를 사용하십시오.
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
class NTP_UTC_Time
{
private static final String TAG = "SntpClient";
private static final int RECEIVE_TIME_OFFSET = 32;
private static final int TRANSMIT_TIME_OFFSET = 40;
private static final int NTP_PACKET_SIZE = 48;
private static final int NTP_PORT = 123;
private static final int NTP_MODE_CLIENT = 3;
private static final int NTP_VERSION = 3;
// Number of seconds between Jan 1, 1900 and Jan 1, 1970
// 70 years plus 17 leap days
private static final long OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;
private long mNtpTime;
public boolean requestTime(String host, int timeout) {
try {
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(timeout);
InetAddress address = InetAddress.getByName(host);
byte[] buffer = new byte[NTP_PACKET_SIZE];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);
buffer[0] = NTP_MODE_CLIENT | (NTP_VERSION << 3);
writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET);
socket.send(request);
// read the response
DatagramPacket response = new DatagramPacket(buffer, buffer.length);
socket.receive(response);
socket.close();
mNtpTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);
} catch (Exception e) {
// if (Config.LOGD) Log.d(TAG, "request time failed: " + e);
return false;
}
return true;
}
public long getNtpTime() {
return mNtpTime;
}
/**
* Reads an unsigned 32 bit big endian number from the given offset in the buffer.
*/
private long read32(byte[] buffer, int offset) {
byte b0 = buffer[offset];
byte b1 = buffer[offset+1];
byte b2 = buffer[offset+2];
byte b3 = buffer[offset+3];
// convert signed bytes to unsigned values
int i0 = ((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
int i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F) + 0x80 : b1);
int i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F) + 0x80 : b2);
int i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F) + 0x80 : b3);
return ((long)i0 << 24) + ((long)i1 << 16) + ((long)i2 << 8) + (long)i3;
}
/**
* Reads the NTP time stamp at the given offset in the buffer and returns
* it as a system time (milliseconds since January 1, 1970).
*/
private long readTimeStamp(byte[] buffer, int offset) {
long seconds = read32(buffer, offset);
long fraction = read32(buffer, offset + 4);
return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L);
}
/**
* Writes 0 as NTP starttime stamp in the buffer. --> Then NTP returns Time OFFSET since 1900
*/
private void writeTimeStamp(byte[] buffer, int offset) {
int ofs = offset++;
for (int i=ofs;i<(ofs+8);i++)
buffer[i] = (byte)(0);
}
}
다음과 함께 사용하십시오.
long now = 0;
NTP_UTC_Time client = new NTP_UTC_Time();
if (client.requestTime("pool.ntp.org", 2000)) {
now = client.getNtpTime();
}
DateTimeString으로 UTC 시간 "지금"이 필요한 경우 함수를 사용하십시오.
private String get_UTC_Datetime_from_timestamp(long timeStamp){
try{
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
int tzt = tz.getOffset(System.currentTimeMillis());
timeStamp -= tzt;
// DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());
DateFormat sdf = new SimpleDateFormat();
Date netDate = (new Date(timeStamp));
return sdf.format(netDate);
}
catch(Exception ex){
return "";
}
}
다음과 같이 사용하십시오.
String UTC_DateTime = get_UTC_Datetime_from_timestamp(now);
날짜 구문 분석을 피하고 GMT에서 타임 스탬프를 원하면 다음을 사용할 수 있습니다.
final Date gmt = new Timestamp(System.currentTimeMillis()
- Calendar.getInstance().getTimeZone()
.getOffset(System.currentTimeMillis()));
public class CurrentUtcDate
{
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("UTC Time is: " + dateFormat.format(date));
}
}
산출:
UTC Time is: 22-01-2018 13:14:35
필요에 따라 날짜 형식을 변경할 수 있습니다.
SimpleDateFormat
. 오늘날 우리는 java.time
최신 Java 날짜 및 시간 API를 훨씬 더 잘 갖추고 있습니다. 또한 Dan, Antonio 및 다른 사람들이 아직 답변하지 않은 것을 제공하고 있습니까?
java.time 패키지를 사용하고 아래 코드를 포함하십시오.
ZonedDateTime now = ZonedDateTime.now( ZoneOffset.UTC );
또는
LocalDateTime now2 = LocalDateTime.now( ZoneOffset.UTC );
응용 프로그램 요구에 따라.
ZoneOffset
시간대 ( ZoneId
)가 아닌 오프셋 ( )을 사용하는 경우 OffsetDateTime
보다 적합합니다 ZonedDateTime
. (B) LocalDateTime
표준 시간대 나 UTC로부터의 오프셋 개념이 없으므로 현재 순간을 캡처하는 데 사용해서는 안됩니다. (C) 기존의 다른 답변들이이 자료를 다루고 더 나은 일을했다. 이 답변이 어떻게 가치를 더하는지 알 수 없습니다.