| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package org.apache.hadoop.ozone.s3.util; |
| |
| import java.time.format.DateTimeFormatter; |
| import java.time.format.DateTimeFormatterBuilder; |
| import java.time.format.SignStyle; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import static java.time.temporal.ChronoField.DAY_OF_MONTH; |
| import static java.time.temporal.ChronoField.DAY_OF_WEEK; |
| import static java.time.temporal.ChronoField.HOUR_OF_DAY; |
| import static java.time.temporal.ChronoField.MINUTE_OF_HOUR; |
| import static java.time.temporal.ChronoField.MONTH_OF_YEAR; |
| import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; |
| import static java.time.temporal.ChronoField.YEAR; |
| |
| /** |
| * Stricter RFC1123 data format. |
| * <p> |
| * This format always use two digits for the days to make it compatible with |
| * golang clients. |
| */ |
| public final class RFC1123Util { |
| |
| private RFC1123Util() { |
| } |
| |
| /** |
| * An RFC-1123 compatible file format which always use two digits for the |
| * days. |
| */ |
| public static final DateTimeFormatter FORMAT; |
| |
| static { |
| Map<Long, String> dow = new HashMap<>(); |
| dow.put(1L, "Mon"); |
| dow.put(2L, "Tue"); |
| dow.put(3L, "Wed"); |
| dow.put(4L, "Thu"); |
| dow.put(5L, "Fri"); |
| dow.put(6L, "Sat"); |
| dow.put(7L, "Sun"); |
| Map<Long, String> moy = new HashMap<>(); |
| moy.put(1L, "Jan"); |
| moy.put(2L, "Feb"); |
| moy.put(3L, "Mar"); |
| moy.put(4L, "Apr"); |
| moy.put(5L, "May"); |
| moy.put(6L, "Jun"); |
| moy.put(7L, "Jul"); |
| moy.put(8L, "Aug"); |
| moy.put(9L, "Sep"); |
| moy.put(10L, "Oct"); |
| moy.put(11L, "Nov"); |
| moy.put(12L, "Dec"); |
| FORMAT = new DateTimeFormatterBuilder() |
| .parseCaseInsensitive() |
| .parseLenient() |
| .optionalStart() |
| .appendText(DAY_OF_WEEK, dow) |
| .appendLiteral(", ") |
| .optionalEnd() |
| .appendValue(DAY_OF_MONTH, 2, 2, SignStyle.NOT_NEGATIVE) |
| .appendLiteral(' ') |
| .appendText(MONTH_OF_YEAR, moy) |
| .appendLiteral(' ') |
| .appendValue(YEAR, 4) |
| .appendLiteral(' ') |
| .appendValue(HOUR_OF_DAY, 2) |
| .appendLiteral(':') |
| .appendValue(MINUTE_OF_HOUR, 2) |
| .optionalStart() |
| .appendLiteral(':') |
| .appendValue(SECOND_OF_MINUTE, 2) |
| .optionalEnd() |
| .appendLiteral(' ') |
| .appendOffset("+HHMM", "GMT") |
| .toFormatter(); |
| } |
| } |