转换值时重新格式化日期/时间

时间:2013-08-23 10:43:33

标签: java

我收到一张日期(TaxPointDate)的发票,格式为“2012-10-31T00:00:00 + 01:00”

但是我需要将“+01:00”部分替换为“+00:00”,因为我遇到了价值从“2012-10-31T00:00:00 + 01:00”改变的困难原来的“2012-10-30T23:00:00.000Z”,当我重新格式化时,这不是我想要的。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:1)

Mayby这对你有用。但我认为你不会在你的应用程序中使用它。问题是,我更改了DefaultTimeZone,因此每个Date的输出将为'GMT'。我还在TimeZones之间添加偏移量,这样你的输出就是原始时间,最后是+0000。

但请注意,这会改变您的日期。它将时间偏移量添加到小时,原始日期和新日期不相等。

“2012-10-31T00:00:00 + 01:00”和“2012-10-30T23:00:00 + 00:00”是相同的日期。输出因时区而异。

    SimpleDateFormat originalDateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    Date date = originalDateParser.parse("2012-10-31T00:00:00+0100");
    System.out.println("Date Input" + originalDateParser.format(date));

    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    TimeZone timeZoneInputDate = cal.getTimeZone();

    TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

    System.out.println("TimeZone InputDate: " + timeZoneInputDate.getDisplayName());
    cal.add(Calendar.MILLISECOND, (int) timeZoneInputDate.getOffset(date.getTime()));

    SimpleDateFormat newDateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    System.out.println(newDateParser.format(cal.getTime()));

    TimeZone.setDefault(null);

答案 1 :(得分:0)

这会将“+01:00”部分替换为“+00:00”

String s = "2012-10-31T00:00:00+01:00".replaceAll("\\+.*", "+00:00")