packages/locale/src/format/LocaleDateTimeFormatter.js
/*
* @copyright (c) 2017, Philipp Thuerwaechter & Pattrick Hueper
* @license BSD-3-Clause (see LICENSE.md in the root directory of this source tree)
*/
import {
_ as jodaInternal,
DateTimeFormatter,
ChronoField,
ResolverStyle,
IsoChronology,
} from '@js-joda/core';
// eslint-disable-next-line no-unused-vars
import Locale from '../Locale';
import CldrDateTimeFormatterBuilder from './cldr/CldrDateTimeFormatterBuilder';
const { assert: { requireNonNull } } = jodaInternal;
export default class LocaleDateTimeFormatter extends DateTimeFormatter {
/**
* Returns a copy of this formatter with a new locale.
* <p>
* This is used to lookup any part of the formatter needing specific
* localization, such as the text or localized pattern.
* <p>
* This instance is immutable and unaffected by this method call.
*
* @param {!Locale} locale the new locale, not null
* @return a formatter based on this formatter with the requested locale, not null
*/
withLocale(locale) {
requireNonNull(locale, 'locale');
if (locale.equals(this._locale)) {
return this;
}
return new DateTimeFormatter(this._printerParser, locale, this._decimalStyle, this._resolverStyle, this._resolverFields, this._chrono, this._zone);
}
}
export function _init() {
const dow = {
1: 'Mon',
2: 'Tue',
3: 'Wed',
4: 'Thu',
5: 'Fri',
6: 'Sat',
7: 'Sun',
};
const moy = {
1: 'Jan',
2: 'Feb',
3: 'Mar',
4: 'Apr',
5: 'May',
6: 'Jun',
7: 'Jul',
8: 'Aug',
9: 'Sep',
10: 'Oct',
11: 'Nov',
12: 'Dec',
};
LocaleDateTimeFormatter.RFC_1123_DATE_TIME = new CldrDateTimeFormatterBuilder()
.parseCaseInsensitive()
.parseLenient()
.optionalStart()
.appendText(ChronoField.DAY_OF_WEEK, dow)
.appendLiteral(', ')
.optionalEnd()
.appendValue(ChronoField.DAY_OF_MONTH, 2)
.appendLiteral(' ')
.appendText(ChronoField.MONTH_OF_YEAR, moy)
.appendLiteral(' ')
.appendValue(ChronoField.YEAR, 4) // 2 digit year not handled
.appendLiteral(' ')
.appendValue(ChronoField.HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(ChronoField.MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(ChronoField.SECOND_OF_MINUTE, 2)
.optionalEnd()
.appendLiteral(' ')
.appendZoneId()
.toFormatter(ResolverStyle.SMART).withChronology(IsoChronology.INSTANCE);
}