Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.squarespace.cldr.examples.ReadmeExamples Maven / Gradle / Ivy
package com.squarespace.cldr.examples;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.function.BiFunction;
import com.squarespace.cldr.CLDR;
import com.squarespace.cldr.LanguageMatcher;
import com.squarespace.cldr.LanguageMatcher.Match;
import com.squarespace.cldr.MessageArgs;
import com.squarespace.cldr.MessageFormat;
import com.squarespace.cldr.StringMessageArg;
import com.squarespace.cldr.dates.CalendarFormat;
import com.squarespace.cldr.dates.CalendarFormatOptions;
import com.squarespace.cldr.dates.CalendarFormatter;
import com.squarespace.cldr.dates.CalendarSkeleton;
import com.squarespace.cldr.dates.CalendarUtils;
import com.squarespace.cldr.dates.DateTimeField;
import com.squarespace.cldr.dates.DateTimeIntervalSkeleton;
import com.squarespace.cldr.numbers.CurrencyFormatOptions;
import com.squarespace.cldr.numbers.CurrencyFormatStyle;
import com.squarespace.cldr.numbers.DecimalFormatOptions;
import com.squarespace.cldr.numbers.DecimalFormatStyle;
import com.squarespace.cldr.numbers.NumberFormatMode;
import com.squarespace.cldr.numbers.NumberFormatter;
import com.squarespace.cldr.numbers.NumberRoundMode;
import com.squarespace.cldr.units.Unit;
import com.squarespace.cldr.units.UnitCategory;
import com.squarespace.cldr.units.UnitConverter;
import com.squarespace.cldr.units.UnitFactorSet;
import com.squarespace.cldr.units.UnitFactorSets;
import com.squarespace.cldr.units.UnitFactors;
import com.squarespace.cldr.units.UnitFormat;
import com.squarespace.cldr.units.UnitFormatOptions;
import com.squarespace.cldr.units.UnitValue;
public class ReadmeExamples {
public static void main(String[] args) {
matching();
locales();
bundle();
datetime();
datetimeIntervals();
messages();
names();
numbers();
numbersCompact();
currencies();
units();
unitSequences();
}
private static void matching() {
LanguageMatcher matcher = new LanguageMatcher("es-419, es-ES, es-PT");
Match match = matcher.match("es-AR");
System.out.println(match.bundleId() + " distance=" + match.distance());
//> "es-419 distance=4"
match = new LanguageMatcher("es, es-419, es-PT").match("es-MX");
System.out.println(match.bundleId());
//> "es-419"
match = new LanguageMatcher("es, es-419, es-MX").match("es-PT");
System.out.println(match.bundleId());
//> "es"
match = new LanguageMatcher("es-419, es-PT, es-MX").match("es");
System.out.println(match.bundleId());
//> "es-PT"
match = new LanguageMatcher("en, en-GU, en-IN, en-GB").match("en-VI");
System.out.println(match.bundleId());
//> "en"
match = new LanguageMatcher("en, en-GU, en-IN, en-GB").match("en-AU");
System.out.println(match.bundleId());
//> "en-GB"
match = new LanguageMatcher("en-US, en-GU, en-IN, en-GB").match("en-019");
System.out.println(match.bundleId());
//> "en-US"
match = new LanguageMatcher("en-US, en-GU, en-IN, en-GB").match("en-150");
System.out.println(match.bundleId());
//> "en-GB"
match = new LanguageMatcher("en_US, fr_FR, de_DE").match("fr");
System.out.println(match.bundleId());
//> "fr_FR"
// Default returns maximum distance
matcher = new LanguageMatcher("en-US, en-GB, de-DE");
match = matcher.match("zh");
System.out.println(match);
//> Match(en-US, 100)
// Get access to all distances below the threshold
matcher = new LanguageMatcher("zh, zh-TW, zh-HK");
List matches = matcher.matches("zh-MO");
System.out.println(matches);
//> [Match(zh-HK, 4), Match(zh-TW, 5), Match(zh, 23)]
matches = matcher.matches("zh-MO", 15);
System.out.println(matches);
//> [Match(zh-HK, 4), Match(zh-TW, 5)]
}
private static void locales() {
CLDR.Locale locale = CLDR.get().resolve("zh-CN");
System.out.println(locale);
//> zh-Hant-CN
locale = CLDR.get().resolve("zh-HK");
System.out.println(locale);
System.out.printf("%s / %s / %s\n", locale.language(), locale.script(), locale.territory());
//> zh-Hant-HK
//> zh / Hant / HK
locale = CLDR.get().resolve("sr");
System.out.println(locale);
//> sr-Cyrl-RS
locale = CLDR.get().resolve(java.util.Locale.CANADA_FRENCH);
System.out.println(locale);
//> fr-Latn-CA
locale = CLDR.get().resolve(java.util.Locale.JAPANESE);
System.out.println(locale);
//> ja-Jpan-JP
locale = CLDR.get().resolve("en_XY");
System.out.println(locale);
//> en-Latn-XY
locale = CLDR.get().resolve("und-Zzzz-ZZ");
System.out.println(locale);
//> en-Latn-US
// MINIMIZE
locale = CLDR.get().resolve("en");
System.out.println(locale);
//> "en-Latn-US"
locale = CLDR.get().minimize(locale);
System.out.println(locale);
//> "en"
}
private static void bundle() {
NumberFormatter f = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
System.out.println(f.bundleId());
//> "en"
CLDR.Locale locale = CLDR.get().resolve("en_US");
f = CLDR.get().getNumberFormatter(locale);
System.out.println(f.bundleId());
//> "en"
locale = CLDR.get().resolve(java.util.Locale.US);
f = CLDR.get().getNumberFormatter(locale);
System.out.println(f.bundleId());
//> "en"
locale = CLDR.get().resolve("en-Latn-US");
f = CLDR.get().getNumberFormatter(locale);
System.out.println(f.bundleId());
//> "en"
}
private static void messages() {
String format = "Transmission of {0 unit compact:bytes} "
+ "took {1 unit in:second sequence:hour,minute,second format:long}";
ZoneId tzNewYork = ZoneId.of("America/New_York");
MessageFormat msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
MessageArgs args = MessageArgs.newBuilder().add("1234567890").add("12345").build();
StringBuilder buf = new StringBuilder();
msg.format(args, buf);
System.out.println(buf);
//> "Transmission of 1.1GB took 3 hours 25 minutes 45 seconds"
buf.setLength(0);
ZoneId tzParis = ZoneId.of("Europe/Paris");
msg = new MessageFormat(CLDR.Locale.fr_FR, tzParis, format);
msg.format(args, buf);
System.out.println(buf);
//> "Transmission of 1,1 Go took 3 heures 25 minutes 45 secondes"
buf.setLength(0);
format = "The total for the {count plural one{product} other{# products}} "
+ "you ordered is {amount currency} "
+ "on {2 datetime wrap:full}.";
msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
StringMessageArg amount = new StringMessageArg("1234.56");
amount.setCurrency("USD");
args = MessageArgs.newBuilder()
.add("count", "1")
.add("amount", amount)
.add("1498584124000")
.build();
msg.format(args, buf);
System.out.println(buf);
//> The total for the product you ordered is $1,234.56
//> on Tuesday, June 27, 2017 at 1:22:04 PM Eastern Daylight Time.
buf.setLength(0);
msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
args = MessageArgs.newBuilder()
.add("count", "23")
.add("amount", amount)
.add("1498584124000")
.build();
msg.format(args, buf);
System.out.println(buf);
//> The total for the 23 products you ordered is $1,234.56 on
//> Tuesday, June 27, 2017 at 1:22:04 PM Eastern Daylight Time.
buf.setLength(0);
format = "The event takes place from {0;1 datetime-interval MMMd} and we hope to "
+ "raise {2 currency style:short} for our foundation.";
msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
amount = new StringMessageArg("999990");
amount.setCurrency("EUR");
args = MessageArgs.newBuilder()
.add("1509647217000")
.add("1509819011000")
.add(amount)
.build();
msg.format(args, buf);
System.out.println(buf);
//> The event takes place from Nov 2 – 4 and we hope to raise $1M for our foundation.
buf.setLength(0);
format = "Congratulations, you came in {0 selectordinal one{#st} two{#nd} few{#rd} other{#th}} place, "
+ "up from {1 selectordinal one{#st} two{#nd} few{#rd} other{#th}}, "
+ "that's quite an improvement!";
msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
args = MessageArgs.newBuilder().add("3").add("27").build();
msg.format(args, buf);
System.out.println(buf);
//> Congratulations, you came in 3rd place, up from 27th, that's quite an improvement!
buf.setLength(0);
format = "{name} has successfully enabled {gender select male {his} female {her} other {their}} account.";
msg = new MessageFormat(CLDR.Locale.en_US, tzNewYork, format);
args = MessageArgs.newBuilder()
.add("name", "Sally")
.add("gender", "female")
.build();
msg.format(args, buf);
System.out.println(buf);
//> Sally has successfully enabled her account.
buf.setLength(0);
args = MessageArgs.newBuilder()
.add("name", "Squarespace")
.add("gender", "unknown")
.build();
msg.format(args, buf);
System.out.println(buf);
//> Squarespace has successfully enabled their account.
}
private static void names() {
CLDR cldr = CLDR.get();
BiFunction getDisplayName = (language, code) -> {
CLDR.Locale locale = cldr.resolve(language);
CLDR.Currency currency = CLDR.Currency.fromString(code);
NumberFormatter f = cldr.getNumberFormatter(locale);
return f.getCurrencyDisplayName(currency);
};
String name = getDisplayName.apply("es-ES", "USD");
System.out.println(name);
//> "dólar estadounidense"
name = getDisplayName.apply("en-US", "JPY");
System.out.println(name);
//> "Japanese Yen"
name = getDisplayName.apply("es-419", "ARS");
System.out.println(name);
//> "peso argentino"
name = getDisplayName.apply("zh-ZH", "CNY");
System.out.println(name);
//> "人民币"
}
private static void numbers() {
NumberFormatter f = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
StringBuilder buffer = new StringBuilder();
BigDecimal n = BigDecimal.valueOf(Math.PI);
DecimalFormatOptions options = new DecimalFormatOptions();
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 3.142
buffer.setLength(0);
options = new DecimalFormatOptions().setMaximumFractionDigits(5);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 3.14159
buffer.setLength(0);
options = new DecimalFormatOptions().setRoundMode(NumberRoundMode.FLOOR);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 3.141
n = new BigDecimal("10000");
buffer.setLength(0);
options = new DecimalFormatOptions().setMinimumFractionDigits(2).setGrouping(true);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 10,000.00
n = new BigDecimal("12.345");
buffer.setLength(0);
options = new DecimalFormatOptions().setStyle(DecimalFormatStyle.PERCENT).setGrouping(true);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 1,234%
buffer.setLength(0);
options = new DecimalFormatOptions().setStyle(DecimalFormatStyle.PERCENT_SCALED).setGrouping(true);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 12%
}
private static void numbersCompact() {
StringBuilder buffer = new StringBuilder();
BigDecimal n = new BigDecimal("999.95");
DecimalFormatOptions options = new DecimalFormatOptions(DecimalFormatStyle.LONG);
NumberFormatter f = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
f.formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 1 thousand
buffer.setLength(0);
CLDR.get().getNumberFormatter(CLDR.Locale.fr).formatDecimal(n, buffer, options);
System.out.println(buffer);
//> 1 millier
for (String num : new String[] { "1000", "1200", "2000", "5000" }) {
n = new BigDecimal(num);
buffer.setLength(0);
CLDR.get().getNumberFormatter(CLDR.Locale.pl).formatDecimal(n, buffer, options);
System.out.println(buffer);
}
//> 1 tysiąc
//> 1,2 tysiąca
//> 2 tysiące
//> 5 tysięcy
}
private static void units() {
NumberFormatter f = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
StringBuilder buffer = new StringBuilder();
UnitFormatOptions options = new UnitFormatOptions();
UnitConverter converter = CLDR.get().getUnitConverter(CLDR.Locale.en_CA);
System.out.println(converter.measurementSystem());
//> METRIC
converter = CLDR.get().getUnitConverter(CLDR.Locale.en_GB);
System.out.println(converter.measurementSystem());
//> UK
converter = CLDR.get().getUnitConverter(CLDR.Locale.en_US);
System.out.println(converter.measurementSystem());
//> US
UnitValue value = new UnitValue("1234567", Unit.FOOT);
UnitValue converted = converter.convert(value, Unit.KILOMETER);
System.out.println(converted);
//> UnitValue(376.2960216, KILOMETER)
f.formatUnit(converted, buffer, options);
System.out.println(buffer);
//> 376.3 km
value = new UnitValue("125.785", Unit.MEGABYTE);
buffer.setLength(0);
f.formatUnit(value, buffer, options);
System.out.println(buffer);
//> 125.8MB
converted = converter.convert(value, Unit.GIGABYTE);
System.out.println(converted);
//> UnitValue(0.1228369140625, GIGABYTE)
buffer.setLength(0);
f.formatUnit(converted, buffer, options);
System.out.println(buffer);
//> 0.1GB
buffer.setLength(0);
options.setGrouping(true);
value = new UnitValue("112233445566778899", Unit.BYTE);
converted = converter.convert(value, UnitFactorSets.DIGITAL_BYTES);
f.formatUnit(converted, buffer, options);
System.out.println(buffer);
//> 102,075.7TB
options = new UnitFormatOptions(UnitFormat.LONG).setGrouping(true);
buffer.setLength(0);
f = CLDR.get().getNumberFormatter(CLDR.Locale.fr);
f.formatUnit(converted, buffer, options);
System.out.println(buffer);
//> 102 075,7 téraoctets
}
private static void unitSequences() {
StringBuilder buffer = new StringBuilder();
UnitFormatOptions longOptions = new UnitFormatOptions(UnitFormat.LONG);
UnitFormatOptions narrowOptions = new UnitFormatOptions(UnitFormat.NARROW);
UnitConverter converter = CLDR.get().getUnitConverter(CLDR.Locale.en_US);
UnitValue degrees = new UnitValue("13.536613", Unit.DEGREE);
List angle = converter.sequence(degrees, UnitFactorSets.ANGLE);
System.out.println(angle);
//> [UnitValue(13, DEGREE), UnitValue(32, ARC_MINUTE), UnitValue(11.8068, ARC_SECOND)]
NumberFormatter fmt = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
fmt.formatUnits(angle, buffer, longOptions);
System.out.println(buffer);
//> 13 degrees 32 arcminutes 11.8 arcseconds
buffer.setLength(0);
fmt.formatUnits(angle, buffer, narrowOptions);
System.out.println(buffer);
//> 13° 32′ 11.8″
buffer.setLength(0);
UnitValue days = new UnitValue("753", Unit.DAY);
List duration = converter.sequence(days, UnitFactorSets.DURATION);
fmt.formatUnits(duration, buffer, longOptions);
System.out.println(buffer);
//> 2 years 22 days 12 hours 21 minutes 36 seconds
buffer.setLength(0);
fmt.formatUnits(duration, buffer, narrowOptions);
System.out.println(buffer);
//> 2y 22d 12h 21m 36s
buffer.setLength(0);
fmt = CLDR.get().getNumberFormatter(CLDR.Locale.ko);
fmt.formatUnits(duration, buffer, narrowOptions);
System.out.println(buffer);
//> 2년 22일 12시간 21분 36초
buffer.setLength(0);
fmt = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
days = new UnitValue("753.35", Unit.DAY);
UnitFactorSet durationFactors = new UnitFactorSet(UnitFactors.DURATION, Unit.WEEK, Unit.HOUR);
duration = converter.sequence(days, durationFactors);
System.out.println(duration);
//> [UnitValue(107, WEEK), UnitValue(104.4, HOUR)]
fmt.formatUnits(duration, buffer, longOptions);
System.out.println(buffer);
//> 107 weeks 104.4 hours
buffer.setLength(0);
UnitValue inches = new UnitValue("1234567", Unit.INCH);
UnitFactorSet lengthFactors = new UnitFactorSet(UnitFactors.LENGTH, Unit.MILE, Unit.FOOT);
List length = converter.sequence(inches, lengthFactors);
System.out.println(length);
//> [UnitValue(19, MILE), UnitValue(2560.583333333333, FOOT)]
fmt.formatUnits(length, buffer, narrowOptions);
System.out.println(buffer);
//> 19mi 2560.6′
buffer.setLength(0);
for (CLDR.Locale locale : new CLDR.Locale[] { CLDR.Locale.en_CA, CLDR.Locale.en_US }) {
converter = CLDR.get().getUnitConverter(locale);
if (converter.measurementSystem().usesMetric(UnitCategory.LENGTH)) {
lengthFactors = UnitFactorSets.LENGTH;
} else {
lengthFactors = UnitFactorSets.LENGTH_ENGLISH;
}
length = converter.sequence(inches, lengthFactors);
buffer.append(locale).append(' ');
fmt.formatUnits(length, buffer, longOptions);
buffer.append('\n');
}
System.out.println(buffer);
//> en-CA 31 kilometers 358 meters 0.2 centimeters
//> en-US 19 miles 853 yards 1 foot 7 inches
}
private static void currencies() {
NumberFormatter f = CLDR.get().getNumberFormatter(CLDR.Locale.en_US);
StringBuilder buffer = new StringBuilder();
BigDecimal n = new BigDecimal("1");
CurrencyFormatOptions options = new CurrencyFormatOptions();
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> $1.00
n = new BigDecimal("-1");
options = new CurrencyFormatOptions(CurrencyFormatStyle.ACCOUNTING);
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> ($1.00)
n = new BigDecimal("69900");
options = new CurrencyFormatOptions(CurrencyFormatStyle.NAME);
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> 69,900.00 US dollars
options = new CurrencyFormatOptions(CurrencyFormatStyle.CODE);
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> 69,900.00 USD
n = new BigDecimal("1.491");
options = new CurrencyFormatOptions().setRoundMode(NumberRoundMode.CEIL);
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> $1.50
options = new CurrencyFormatOptions(CurrencyFormatStyle.SHORT)
.setFormatMode(NumberFormatMode.SIGNIFICANT_MAXFRAC)
.setMaximumFractionDigits(1);
n = new BigDecimal("1200");
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> $1.2K
n = new BigDecimal("999999");
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> $1M
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.EUR, buffer, options);
System.out.println(buffer);
//> €1M
// Currency minimum fraction digits will be defaulted for specific currencies.
options = new CurrencyFormatOptions(CurrencyFormatStyle.CODE);
n = new BigDecimal("123.4567");
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.USD, buffer, options);
System.out.println(buffer);
//> 123.46 USD
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.JPY, buffer, options);
System.out.println(buffer);
//> 123 JPY
// If you do need to show fractions of YEN (displaying exchange
// rates, etc) use options
options = new CurrencyFormatOptions(CurrencyFormatStyle.CODE)
.setMinimumFractionDigits(3);
buffer.setLength(0);
f.formatCurrency(n, CLDR.Currency.JPY, buffer, options);
System.out.println(buffer);
//> 123.457 JPY
}
private static void datetimeIntervals() {
StringBuilder buffer = new StringBuilder();
long epoch = 1288648500000L;
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime start = ZonedDateTime.ofInstant(Instant.ofEpochMilli(epoch), zoneId);
ZonedDateTime end = start.withYear(2020).withMonth(12);
CalendarFormatter f = CLDR.get().getCalendarFormatter(CLDR.Locale.en_US);
f.format(start, end, DateTimeIntervalSkeleton.y, buffer);
System.out.println(buffer);
//> 2010 – 2020
buffer.setLength(0);
f.format(start, end, DateTimeIntervalSkeleton.yMMM, buffer);
System.out.println(buffer);
//> Nov 2010 – Dec 2020
end = start.withMonth(12);
buffer.setLength(0);
f.format(start, end, DateTimeIntervalSkeleton.yMMM, buffer);
System.out.println(buffer);
//> Nov – Dec 2010
end = start.withDayOfMonth(23);
buffer.setLength(0);
f.format(start, end, DateTimeIntervalSkeleton.yMMMd, buffer);
System.out.println(buffer);
//> Nov 1 – 23, 2010
end = start.withHour(22);
buffer.setLength(0);
f.format(start, end, DateTimeIntervalSkeleton.hmv, buffer);
System.out.println(buffer);
//> 5:55 – 10:55 PM ET
start = start.withMinute(1);
end = start.withMinute(27);
buffer.setLength(0);
f.format(start, end, DateTimeIntervalSkeleton.Hm, buffer);
System.out.println(buffer);
//> 17:01 – 17:27
end = start.withMonth(12);
DateTimeField field = CalendarUtils.fieldOfGreatestDifference(start, end);
System.out.println(field);
//> MONTH
}
private static void datetime() {
long epoch = 1288648500000L;
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime datetime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(epoch), zoneId);
StringBuilder buffer = new StringBuilder();
CalendarFormatter f = CLDR.get().getCalendarFormatter(CLDR.Locale.en_US);
CalendarFormatOptions options = new CalendarFormatOptions();
f.format(datetime, options, buffer);
System.out.println(buffer);
//> 11/1/2010
options = new CalendarFormatOptions().setDateSkeleton(CalendarSkeleton.GyMMMd);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> Nov 1, 2010 AD
options = new CalendarFormatOptions().setDateFormat(CalendarFormat.MEDIUM);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> Nov 1, 2010
options = new CalendarFormatOptions().setTimeFormat(CalendarFormat.MEDIUM);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> 5:55:00 PM
options = new CalendarFormatOptions().setWrapperFormat(CalendarFormat.MEDIUM);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> Nov 1, 2010, 5:55:00 PM
epoch = 1288598100000L;
datetime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(epoch), zoneId);
options = new CalendarFormatOptions().setWrapperFormat(CalendarFormat.FULL);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> Monday, November 1, 2010 at 3:55:00 AM Eastern Daylight Time
zoneId = ZoneId.of("America/Los_Angeles");
datetime = datetime.withZoneSameInstant(zoneId);
buffer.setLength(0);
f.format(datetime, options, buffer);
System.out.println(buffer);
//> Monday, November 1, 2010 at 12:55:00 AM Pacific Daylight Time
// Individual date and time fields
buffer.setLength(0);
f.formatField(datetime, "EEEE", buffer);
System.out.println(buffer);
//> Monday
buffer.setLength(0);
f.formatField(datetime, "LLLL", buffer);
System.out.println(buffer);
//> November
}
}