XQuery, tarih dönüştürme için yararlı bir dizi fonksiyona sahiptir. Ama "Bugün" ve "Dün" gibi göreli tarihler gerçek tarihe nasıl dönüştürülür? Örneğin, "Bugün, 17:33", "2012-05-30" ve "Dün, 22:13" ila "2012-05-29" değerine dönüştürülmelidir. Örneğin;"Bugün" ve "Dün" gibi göreli tarihler bir XQuery tarih nesnesine nasıl dönüştürülür?
5
A
cevap
8
1. Tarih dizesini ayrıştırma
Tarih dizesini ayrıştırma. Tarihi gösteren kelimeyi bölen ve ayrıştıran küçük bir işlev sağladım. Tarihler için bazı daha uygun isimler ekledim, ancak gerekirse daha fazlasını kolayca ekleyebilirim, küçük harfe dönüştürdüğümü fark ettim! Eşleme tarihini hesaplamak için XQuery date and time functions kullanır.
declare function local:from-relative-date($string as xs:string) as xs:date {
switch (lower-case(substring-before($string, ",")))
case "today" return current-date()
case "yesterday" return current-date() - xs:dayTimeDuration('P1D')
case "day before yesterday" return current-date() - 2 * xs:dayTimeDuration('P1D')
case "tomorrow" return current-date() + xs:dayTimeDuration('P1D')
case "day after tomorrow" return current-date() + 2 * xs:dayTimeDuration('P1D')
default return error(xs:QName("XPTY0004"), "Unknown Date")
};
2. Biçim
Şimdi XQuery 3.0 fonksiyonunu format-date(...)
kullandığınız tarih İhtiyacınız gibi tarih dizesi biçimlendirmek için (Ben senin XQuery motoru, ben yok bu örnek için kullanılan baseX destekliyorsa umut) : o, sen month ve day için year-from-date(...)
ve uygun işlevlerini kullanmak zorunda kalacak yoksa
format-date(local:from-relative-date("Yesterday, 22:13"), "[Y]-[M00]-[D00]")
, biçimlendirme bazı numarasını kullanmak ve kendinizi bağlamak.
+1, Aww Böyle şeyler. Varlığımızı güncellemek için çalıştığım yeri gerçekten ikna etmeliyiz! – matchew