将日期时间与日期和时间分开,时区末尾为“Z”,以乔达时间表示



我有一个Joda-Time DateTime对象,需要分别有日期和时间,末尾有时区标签:

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

这是一个工作示例

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"))));

基本上,如果时区偏移量为零,则打印Z .由于ZuluUTC的偏移量为 0,因此将打印该偏移量。

如果您尝试使用军事代码(即 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

试试这个

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

使用"z"而不是"Z"。

最新更新