2014-02-27 68 views
3

我有一個Joda-TimeDateTime對象,並需要在月底有日期和時間分開,與時區標籤:獨立日期時間日期和時間與時區`Z`末,在喬達時間

DateTime dateTime = new DateTime(); 
System.out.println(dateTime.toString("YYYY-MM-ddZ")); 
System.out.println(dateTime.toString("HH:mm:ssZ")); 

在這種情況下,輸出將是:

2014-02-27+0000 
15:10:36+0000 

幾乎正是我需要的,但它可能有它這樣的嗎?

2014-02-27Z 
15:10:36Z 
+1

這是使用jodatime?如果是的話,你應該在你的問題中說明。任何不使用std java api的理由? – rainkinz

+2

@rainkinz:有很多原因使用Joda時間,而不是標準(前8)Java API。但是,是的,這個問題真的應該說明這是關於喬達時間。 –

+0

出於好奇:爲什麼?你不能僅僅從一個日期就知道確切的時間,即使有時區信息,日期和時間也是一樣的... – fge

回答

4

這裏的工作示例

DateTime dateTime = new DateTime(); 
DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
      .appendPattern("yyyy-MM-dd") 
      .appendTimeZoneOffset("Z", false, 2, 2) 
      .toFormatter(); 
System.out.println(formatter.print(dateTime.withZone(DateTimeZone 
      .forID("Zulu")))); 

基本上,如果time zone offset是零,您打印Z。由於ZuluUTC的偏移量爲0,這就是要打印的內容。

+0

正確的答案,但代碼可能會更簡短。 (a)'DateTimeFormatter formatter = ISODateTimeFormat.date();'爲yyyy-MM-dd生成一個格式化程序。除非你需要一個非常棘手的格式,否則你通常不需要使用'DateTimeFormatterBuilder'。 (b)而不是'DateTimeZone.forID(「Zulu」)'使用'DateTimeZone.UTC'常量。 –

+0

@basil ISO是我對此的想法,但該模式看起來並不像它具有時區偏移。 –

+0

啊,我現在看到這個問題最後需要一個'Z'。一讀時我錯過了。做得好。 –

0

試試這個

DateTime dateTime = new DateTime(); 
System.out.println(dateTime.toString("YYYY-MM-dd z"); 
System.out.println(dateTime.toString("HH:mm:ss z"); 

使用 「Z」,而不是 「Z」。

+2

不,這是行不通的。 'Z'是GMT的時區別名。如果你的時區是別的什麼,它將無效。 – fge

+1

輸出將是'2014-02-27 GMT'而不是'2014-02-27Z' – XpressOneUp

1

如果你正在嘗試使用軍用碼(即Z表示GMT看到:http://www.timeanddate.com/library/abbreviations/timezones/military/z.html),你可以使這樣的事情:

import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 
import java.util.TimeZone; 

import java.util.Date; 

public class CalendarExample { 

    static final String MILITARY_OFFSETS = "YXWVUTSRQPONZABCDEFGHIKLM"; 
    static final int MILLIS_IN_HOUR = 1000*60*60; 

    public static void main(String[] args) { 
    System.out.println(formatDate(new Date(), "yyyy-MM-dd", "GMT")); // 2014-02-27Z 
    System.out.println(formatDate(new Date(), "HH:mm:ss", "GMT")); 
    System.out.println(formatDate(new Date(), "yyyy-MM-dd", "EST")); 
    System.out.println(formatDate(new Date(), "HH:mm:ss", "EST")); 
    } 

    static String formatDate(Date date, String dateTimeFormat, String timezoneCode) { 
    Calendar calendar = new GregorianCalendar(); 
    TimeZone tz = TimeZone.getTimeZone(timezoneCode); 
    calendar.setTimeZone(tz); 
    int offset = calendar.get(Calendar.ZONE_OFFSET)/MILLIS_IN_HOUR; 

    // System.out.println(timezoneCode + " Offset is " + offset + " hours"); 
    String timeZoneCode = MILITARY_OFFSETS.substring(offset + 12, offset + 13); 
    SimpleDateFormat dateFmt = new SimpleDateFormat(dateTimeFormat + "'" + timeZoneCode + "'"); 

    return dateFmt.format(date); 
    } 

} 

輸出:

2014-02-27Z 
11:57:44Z 
2014-02-27R 
11:57:44R