在Joda-Time中,将日期时间分隔为日期和时间,时区为“Z”

时间:2014-02-27 15:14:33

标签: java datetime jodatime

我有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

3 个答案:

答案 0 :(得分: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,因此将打印出来。

答案 1 :(得分: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

答案 2 :(得分: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”。