package net.time4j.scale;
import net.time4j.Moment;
import net.time4j.PlainDate;
import net.time4j.PlainTime;
import net.time4j.PlainTimestamp;
import net.time4j.Platform;
import net.time4j.ZonalDateTime;
import net.time4j.format.TemporalFormatter;
import net.time4j.tz.Timezone;
import net.time4j.tz.ZonalOffset;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import java.text.ParseException;
import java.util.Locale;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class ZonalDateTimeTest {
@Test
public void toMoment() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).toMoment(),
is(moment));
}
@Test
public void toTimestamp() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).toTimestamp(),
is(PlainTimestamp.of(2012, 7, 1, 8, 59, 59)));
}
@Test
public void hasTimezone() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).hasTimezone(),
is(true));
}
@Test
public void getTimezone() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).getTimezone(),
is(tz.getID()));
}
@Test
public void isLeapsecond() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).isLeapSecond(),
is(true));
}
@Test
public void getSecondOfMinute() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).get(PlainTime.SECOND_OF_MINUTE),
is(60));
}
@Test
public void getDayOfMonth() {
Moment moment = Moment.of(1278028824, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).get(PlainDate.DAY_OF_MONTH),
is(1));
}
@Test
public void getPosixTime() {
long utc = 1278028824L;
Moment moment = Moment.of(utc, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
assertThat(
moment.inZonalView(tz.getID()).getPosixTime(),
is(utc + 2 * 365 * 86400 - 25));
}
@Test
public void getMaxSecondOfMinute() {
Moment moment =
PlainTimestamp.of(2012, 6, 30, 23, 59, 0).atUTC();
assertThat(
moment.inZonalView(ZonalOffset.UTC)
.getMaximum(PlainTime.SECOND_OF_MINUTE),
is(60));
}
@Test
public void printZDT() {
Moment moment = Moment.of(1278028825, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
TemporalFormatter<Moment> formatter =
Moment.formatter("yyyy-MM-dd'T'HH:mmZ", Platform.PATTERN, Locale.ROOT, tz.getID());
System.out.println("ZonalDateTime-Formatter-INFO: " + formatter.getClass().getName());
assertThat(
moment.inZonalView(tz.getID()).print(formatter),
is("2012-07-01T09:00+0900"));
}
@Test
public void parseZDT() throws ParseException {
Moment moment = Moment.of(1278028825, TimeScale.UTC);
Timezone tz = Timezone.of("Asia/Tokyo");
TemporalFormatter<Moment> formatter =
Moment.formatter("yyyy-MM-dd'T'HH:mmZ", Platform.PATTERN, Locale.ROOT, tz.getID());
assertThat(
ZonalDateTime.parse("2012-07-01T09:00+0900", formatter),
is(moment.inZonalView(tz.getID())));
}
}