2014-02-27 69 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