2009-07-21 21 views

cevap

30

Sen Ayrıca saat dilimi değiştirmeniz gerekebilir

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -02:00') FROM DUAL; 

kullanabilirsiniz

ALTER SESSION SET TIME_ZONE = 'Europe/Berlin'; 

Yoksa

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM dual; 
+1

Peki, hile SYSDATE dan dönüştürülmesidir. Yani, bir şekilde SESSIONTIMEZONE'un ne olduğunu bir şekilde kurmanız ve SYS_EXTRACT_UTC için ofset değerini elde etmek için bu bilgiyi kullanmanız gerekir. – stic

+0

Evet, bu bağlantıyı oracle'den Datetime ve Time Zone Parametrelerini kontrol edebilirsiniz: http://www.oracle.com/technology/obe/obe9ir2/obe-nls/datetime/datetime.htm – Jonathan

+1

Cevabı yüce bir böcek. –

32
select sys_extract_utc(systimestamp) from dual; 

olsa, Oracle 8 Çalışmaz okuyun.

19

Genellikle, DATE sütunlarıyla çalışıyorum, daha büyük ama daha kesin TIMESTAMP değil.

Aşağıdakiler geçerli UTC tarihini yalnızca bir DATE olarak döndürecektir. Ben zaman dilimleri karmaşıklığı konusunda endişelenmenize gerek yok çünkü

CAST(sys_extract_utc(SYSTIMESTAMP) AS DATE) 

UTC tarihleri ​​ile çalışma harika. Sadece kullanıcı için son ekran ofsetleri veya başka bir problemi gerektirir.

+0

Ben bu ile 2 tarih karşılaştırmak denedim (eşittir) ve beklenen sonuç almıyordu bu yüzden hala bir zaman bileşeni geri döndüğünü düşünüyorum. TRUNC deyimini kullanıyorum: Seç * Öğe Nereden TRUNC (Create_Date) = ( TRUNC Seç (sys_extract_utc (SYSTIMESTAMP)) DUAL'den) – DaveK

+2

DATE sütunları bir saniyeye kadar doğrulukla bir zaman bileşeni içerir. TIMESTAMP sütunlarından, TIMESTAMP değerlerinin doğruluğunu bir saniyeden daha uzun bir sürede sakladığı için farklıdır. Gerçekten de, TRUNC değerini yukarıdakilere eklemek, zaman bileşenini kısaltmak istediğinizde yapmak istediğiniz şeydir. –

1

yerine SYSDATE sadece bir tarih bir zaman damgası istiyorsanız, bir zaman dilimi kullanarak systimestamp belirtebilirsiniz:

select systimestamp at time zone 'UTC' from dual 

çıkışlar: 29-AUG-17 06.51.14.781998000 PM UTC

İlgili konular