{"action":"created","comment":{"url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/comments/229028061","pull_request_review_id":169429810,"id":229028061,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyOTAyODA2MQ==","diff_hunk":"@@ -0,0 +1,393 @@\n+package org.threeten.extra;\n+\n+import java.io.Serializable;\n+import java.time.DayOfWeek;\n+import java.time.LocalTime;\n+import java.time.format.TextStyle;\n+import java.time.temporal.*;\n+import java.util.Locale;\n+import java.util.Objects;\n+\n+/**\n+ * A day-of-week and time without a time-zone in the ISO-8601 calendar system\n+ * such as {@code Monday at 13:45}.\n+ * <p>\n+ * {@code DayTime} is an immutable date-time object that represents the combination\n+ * of a day-of-week and time-of-day.\n+ * Any field that can be derived from those two fields can be obtained.\n+ * <p>\n+ * This class does not store or represent a date or time-zone.\n+ * <p>\n+ * The ISO-8601 calendar system is the modern civil calendar system used today\n+ * in most of the world. It is equivalent to the proleptic Gregorian calendar\n+ * system, in which today's rules for leap years are applied for all time.\n+ * For most applications written today, the ISO-8601 rules are entirely suitable.\n+ * However, any application that makes use of historical dates, and requires them\n+ * to be accurate will find the ISO-8601 approach unsuitable.\n+ * <p>\n+ * ISO-8601 defines the week as always starting with Monday.\n+ *\n+ * <h3>Implementation Requirements:</h3>\n+ * This class is immutable and thread-safe.\n+ * <p>\n+ * This class must be treated as a value type. Do not synchronize, rely on the\n+ * identity hash code or use the distinction between equals() and ==.\n+ *\n+ * @author <a href=\"https://github.com/jchambers\">Jon Chambers</a>\n+ */\n+public final class DayTime\n+        implements Temporal, TemporalAccessor, TemporalAdjuster, Comparable<DayTime>, Serializable {\n+\n+    /**\n+     * Serialization version.\n+     */\n+    private static final long serialVersionUID = -7762817588559947796L;\n+\n+    private final DayOfWeek dayOfWeek;\n+    private final LocalTime localTime;\n+\n+    private static final long NANOS_PER_MICROSECOND = 1_000;\n+    private static final long NANOS_PER_MILLISECOND = 1_000_000;\n+    private static final long NANOS_PER_SECOND = 1_000_000_000;\n+    private static final long NANOS_PER_MINUTE = NANOS_PER_SECOND * 60;\n+    private static final long NANOS_PER_HOUR = NANOS_PER_MINUTE * 60;\n+    private static final long NANOS_PER_DAY = NANOS_PER_HOUR * 24;\n+    private static final long NANOS_PER_WEEK = NANOS_PER_DAY * 7;\n+\n+    private static final long MICROS_PER_DAY = NANOS_PER_DAY / 1000;\n+    private static final long MILLIS_PER_DAY = MICROS_PER_DAY / 1000;\n+    private static final long SECONDS_PER_DAY = MILLIS_PER_DAY / 1000;\n+    private static final long MINUTES_PER_DAY = SECONDS_PER_DAY / 60;\n+\n+    private DayTime(final DayOfWeek dayOfWeek, final LocalTime localTime) {\n+        this.dayOfWeek = Objects.requireNonNull(dayOfWeek, \"Day of week must not be null.\");\n+        this.localTime = Objects.requireNonNull(localTime, \"Time of day must not be null.\");\n+    }\n+\n+    /**\n+     * Obtains a {@code DayTime} with the given day of the week and local time.\n+     *\n+     * @param dayOfWeek the day of the week to represent; must not be {@code null}\n+     * @param localTime the local time of day to represent; must not be {@code null}\n+     *\n+     * @return a day-time with the given day of the week and local time\n+     */\n+    public static DayTime of(final DayOfWeek dayOfWeek, final LocalTime localTime) {\n+        return new DayTime(dayOfWeek, localTime);\n+    }\n+\n+    public static DayTime from(final TemporalAccessor temporalAccessor) {\n+        Objects.requireNonNull(temporalAccessor, \"Temporal accessor must not be null.\");\n+\n+        final DayOfWeek dayOfWeek = DayOfWeek.from(temporalAccessor);\n+        final LocalTime localTime = LocalTime.from(temporalAccessor);\n+\n+        return new DayTime(dayOfWeek, localTime);\n+    }\n+\n+    /**\n+     * Gets the day-of-week field using the {@link DayOfWeek} enum.\n+     *\n+     * @return the day of the week\n+     */\n+    public DayOfWeek getDayOfWeek() {\n+        return dayOfWeek;\n+    }\n+\n+    /**\n+     * Gets the hour-of-day field.\n+     *\n+     * @return the hour of the day, from 0 to 23\n+     *\n+     * @see LocalTime#getHour()\n+     */\n+    public int getHour() {\n+        return localTime.getHour();\n+    }\n+\n+    /**\n+     * Gets the minute-of-hour field.\n+     *\n+     * @return the minute of the hour, from 0 to 59\n+     *\n+     * @see LocalTime#getMinute()\n+     */\n+    public int getMinute() {\n+        return localTime.getMinute();\n+    }\n+\n+    /**\n+     * Returns the second-of-minute field.\n+     *\n+     * @return the second of the minute, from 0 to 59\n+     *\n+     * @see LocalTime#getSecond()\n+     */\n+    public int getSecond() {\n+        return localTime.getSecond();\n+    }\n+\n+    /**\n+     * Returns the nano-of-second field.\n+     *\n+     * @return the nano-of-second, from 0 to 999,999,999\n+     *\n+     * @see LocalTime#getNano()\n+     */\n+    public int getNano() {\n+        return localTime.getNano();\n+    }\n+\n+    public LocalTime toLocalTime() {\n+        return localTime;\n+    }\n+\n+    /**\n+     * Checks if the specified field is supported. Any {@link ChronoField} supported by a {@link DayOfWeek} or\n+     * {@link LocalTime} is supported.\n+     *\n+     * @param field the field to check\n+     *\n+     * @return {@code true} if the field is supported or {@code false} otherwise\n+     */\n+    @Override\n+    public boolean isSupported(final TemporalField field) {\n+        if (field instanceof ChronoField) {\n+            final ChronoField chronoField = (ChronoField) field;\n+            return chronoField == ChronoField.DAY_OF_WEEK || chronoField.isTimeBased();\n+        }\n+\n+        return field != null && field.isSupportedBy(this);\n+    }\n+\n+    @Override\n+    public boolean isSupported(final TemporalUnit unit) {\n+        if (unit instanceof ChronoUnit) {\n+            return unit.isTimeBased();\n+        }\n+\n+        return unit != null && unit.isSupportedBy(this);\n+    }\n+\n+    @Override\n+    public long getLong(final TemporalField field) {\n+        if (field instanceof ChronoField) {\n+            final ChronoField chronoField = (ChronoField) field;\n+\n+            if (chronoField == ChronoField.DAY_OF_WEEK) {\n+                return dayOfWeek.getValue();\n+            } else {\n+                return localTime.getLong(field);\n+            }\n+        } else {\n+            return field.getFrom(this);\n+        }\n+    }\n+\n+    @Override\n+    public Temporal adjustInto(final Temporal temporal) {\n+        return localTime.adjustInto(dayOfWeek.adjustInto(temporal));\n+    }\n+\n+    @Override\n+    public DayTime with(final TemporalField field, final long newValue) {\n+        if (field instanceof ChronoField) {\n+            final ChronoField chronoField = (ChronoField) field;\n+\n+            final DayOfWeek dayOfWeek;\n+            final LocalTime localTime;\n+\n+            if (field == ChronoField.DAY_OF_WEEK) {\n+                dayOfWeek = DayOfWeek.of((int) newValue);\n+                localTime = this.localTime;\n+            } else {\n+                dayOfWeek = this.dayOfWeek;\n+                localTime = this.localTime.with(chronoField, newValue);\n+            }\n+\n+            return new DayTime(dayOfWeek, localTime);\n+        }\n+\n+        return field.adjustInto(this, newValue);\n+    }\n+\n+    @Override\n+    public DayTime plus(final long amountToAdd, final TemporalUnit unit) {\n+        final DayTime sum;\n+\n+        if (unit instanceof ChronoUnit) {\n+            final long daysToAdd;\n+            final long nanosToAdd;\n+\n+            switch ((ChronoUnit) unit) {\n+\n+                case NANOS: {\n+                    daysToAdd = amountToAdd / NANOS_PER_DAY;\n+                    nanosToAdd = amountToAdd % NANOS_PER_DAY;\n+                    break;\n+                }\n+\n+                case MICROS: {\n+                    daysToAdd = amountToAdd / MICROS_PER_DAY;\n+                    nanosToAdd = (amountToAdd % MICROS_PER_DAY) * NANOS_PER_MICROSECOND;\n+                    break;\n+                }\n+\n+                case MILLIS: {\n+                    daysToAdd = amountToAdd / MILLIS_PER_DAY;\n+                    nanosToAdd = (amountToAdd % MILLIS_PER_DAY) * NANOS_PER_MILLISECOND;\n+                    break;\n+                }\n+\n+                case SECONDS: {\n+                    daysToAdd = amountToAdd / SECONDS_PER_DAY;\n+                    nanosToAdd = (amountToAdd % SECONDS_PER_DAY) * NANOS_PER_SECOND;\n+                    break;\n+                }\n+\n+                case MINUTES: {\n+                    daysToAdd = amountToAdd / MINUTES_PER_DAY;\n+                    nanosToAdd = (amountToAdd % MINUTES_PER_DAY) * NANOS_PER_MINUTE;\n+                    break;\n+                }\n+\n+                case HOURS: {\n+                    daysToAdd = amountToAdd / 24;\n+                    nanosToAdd = (amountToAdd % 24) * NANOS_PER_HOUR;\n+                    break;\n+                }\n+\n+                case HALF_DAYS: {\n+                    daysToAdd = amountToAdd / 2;\n+                    nanosToAdd = (amountToAdd % 2) * NANOS_PER_DAY / 2;\n+                    break;\n+                }\n+\n+                case DAYS: {\n+                    daysToAdd = amountToAdd;\n+                    nanosToAdd = 0;\n+                    break;\n+                }\n+\n+                default: {\n+                    throw new UnsupportedTemporalTypeException(\"Unsupported unit: \" + unit);\n+                }\n+            }\n+\n+            final LocalTime adjustedTime = localTime.plusNanos(nanosToAdd);\n+            final long carryoverDay;\n+\n+            // We may have wrapped around the day boundary and should \"carry the one\" over to the days to add\n+            if (amountToAdd > 0 && adjustedTime.isBefore(localTime)) {\n+                carryoverDay = 1;\n+            } else if (amountToAdd < 0 && adjustedTime.isAfter(localTime)) {\n+                carryoverDay = -1;\n+            } else {\n+                carryoverDay = 0;\n+            }\n+\n+            sum = new DayTime(dayOfWeek.plus(daysToAdd + carryoverDay), adjustedTime);\n+        } else {\n+            sum = unit.addTo(this, amountToAdd);\n+        }\n+\n+        return sum;\n+    }\n+\n+    @Override\n+    public DayTime minus(final long amountToSubtract, final TemporalUnit unit) {\n+        // Copied from Temporal to provide more convenient typing\n+        return (amountToSubtract == Long.MIN_VALUE ? plus(Long.MAX_VALUE, unit).plus(1, unit) : plus(-amountToSubtract, unit));\n+    }\n+\n+    @Override\n+    public long until(final Temporal endExclusive, final TemporalUnit unit) {\n+        final DayTime endDayTime = DayTime.from(endExclusive);\n+        final long timeUntil;\n+\n+        if (unit instanceof ChronoUnit) {\n+            final long nanosUntil = ((((endDayTime.dayOfWeek.getValue() - dayOfWeek.getValue()) * NANOS_PER_DAY) +\n+                    endDayTime.localTime.toNanoOfDay() - localTime.toNanoOfDay()) + NANOS_PER_WEEK) % NANOS_PER_WEEK;\n+\n+            switch ((ChronoUnit) unit) {\n+                case NANOS: {\n+                    timeUntil = nanosUntil;\n+                    break;\n+                }\n+\n+                case MICROS: {\n+                    timeUntil = nanosUntil / 1000;\n+                    break;\n+                }\n+\n+                case MILLIS: {\n+                    timeUntil = nanosUntil / 1_000_000;\n+                    break;\n+                }\n+\n+                case SECONDS: {\n+                    timeUntil = nanosUntil / NANOS_PER_SECOND;\n+                    break;\n+                }\n+\n+                case MINUTES: {\n+                    timeUntil = nanosUntil / NANOS_PER_MINUTE;\n+                    break;\n+                }\n+\n+                case HOURS: {\n+                    timeUntil = nanosUntil / NANOS_PER_HOUR;\n+                    break;\n+                }\n+\n+                case HALF_DAYS: {\n+                    timeUntil = nanosUntil / (12 * NANOS_PER_HOUR);\n+                    break;\n+                }\n+\n+                case DAYS: {\n+                    timeUntil = nanosUntil / NANOS_PER_DAY;\n+                    break;\n+                }\n+\n+                default: {\n+                    throw new UnsupportedTemporalTypeException(\"Unsupported unit: \" + unit);\n+                }\n+            }\n+        } else {\n+            timeUntil = unit.between(this, endDayTime);\n+        }\n+\n+        return timeUntil;\n+    }\n+\n+    @Override\n+    public int compareTo(final DayTime other) {\n+        final int dayOfWeekComparison = dayOfWeek.compareTo(other.dayOfWeek);\n+        return dayOfWeekComparison == 0 ? localTime.compareTo(other.localTime) : dayOfWeekComparison;\n+    }\n+\n+    @Override\n+    public boolean equals(final Object other) {\n+        if (this == other) {\n+            return true;\n+        }\n+\n+        if (other == null || getClass() != other.getClass()) {\n+            return false;\n+        }\n+\n+        final DayTime that = (DayTime) other;\n+        return dayOfWeek == that.dayOfWeek && Objects.equals(localTime, that.localTime);\n+    }\n+\n+    @Override\n+    public int hashCode() {\n+        return Objects.hash(dayOfWeek, localTime);\n+    }\n+\n+    @Override\n+    public String toString() {\n+        return dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()) + \" \" + localTime.toString();","path":"src/main/java/org/threeten/extra/DayTime.java","position":391,"original_position":391,"commit_id":"29bec20b3168c3cfb4e69312d8372641aa889b48","original_commit_id":"29bec20b3168c3cfb4e69312d8372641aa889b48","user":{"login":"jchambers","id":31352,"node_id":"MDQ6VXNlcjMxMzUy","avatar_url":"https://avatars3.githubusercontent.com/u/31352?v=4","gravatar_id":"","url":"https://api.github.com/users/jchambers","html_url":"https://github.com/jchambers","followers_url":"https://api.github.com/users/jchambers/followers","following_url":"https://api.github.com/users/jchambers/following{/other_user}","gists_url":"https://api.github.com/users/jchambers/gists{/gist_id}","starred_url":"https://api.github.com/users/jchambers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchambers/subscriptions","organizations_url":"https://api.github.com/users/jchambers/orgs","repos_url":"https://api.github.com/users/jchambers/repos","events_url":"https://api.github.com/users/jchambers/events{/privacy}","received_events_url":"https://api.github.com/users/jchambers/received_events","type":"User","site_admin":false},"body":"> Maybe `TUESDAY@09:00` ?\r\n\r\nSounds good to me!\r\n\r\n> It probably should be `--W--2T09:00` but that is unpleasant.\r\n\r\nI won't tell if you won't.","created_at":"2018-10-29T17:37:07Z","updated_at":"2018-10-29T17:37:07Z","html_url":"https://github.com/ThreeTen/threeten-extra/pull/109#discussion_r229028061","pull_request_url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/comments/229028061"},"html":{"href":"https://github.com/ThreeTen/threeten-extra/pull/109#discussion_r229028061"},"pull_request":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109"}},"in_reply_to_id":228742596},"pull_request":{"url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109","id":217820995,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE3ODIwOTk1","html_url":"https://github.com/ThreeTen/threeten-extra/pull/109","diff_url":"https://github.com/ThreeTen/threeten-extra/pull/109.diff","patch_url":"https://github.com/ThreeTen/threeten-extra/pull/109.patch","issue_url":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/109","number":109,"state":"open","locked":false,"title":"Introducing DayTime","user":{"login":"jchambers","id":31352,"node_id":"MDQ6VXNlcjMxMzUy","avatar_url":"https://avatars3.githubusercontent.com/u/31352?v=4","gravatar_id":"","url":"https://api.github.com/users/jchambers","html_url":"https://github.com/jchambers","followers_url":"https://api.github.com/users/jchambers/followers","following_url":"https://api.github.com/users/jchambers/following{/other_user}","gists_url":"https://api.github.com/users/jchambers/gists{/gist_id}","starred_url":"https://api.github.com/users/jchambers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchambers/subscriptions","organizations_url":"https://api.github.com/users/jchambers/orgs","repos_url":"https://api.github.com/users/jchambers/repos","events_url":"https://api.github.com/users/jchambers/events{/privacy}","received_events_url":"https://api.github.com/users/jchambers/received_events","type":"User","site_admin":false},"body":"As discussed in #108, this introduces a `DayTime` class that combines a day-of-week and time-of-day (e.g. \"Monday at 13:45\").\r\n\r\nI know I said I'd do some style-normalizing work first, but it occurred to me that there may some more structural things that need feedback, and so it's probably best to get an early round of review. I still fully intend to sort out the code style differences.\r\n\r\nThis closes #108.","created_at":"2018-09-24T23:59:41Z","updated_at":"2018-10-29T17:37:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3699eef0b56c550f5508dd44b3724217cc842d94","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109/commits","review_comments_url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109/comments","review_comment_url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/109/comments","statuses_url":"https://api.github.com/repos/ThreeTen/threeten-extra/statuses/29bec20b3168c3cfb4e69312d8372641aa889b48","head":{"label":"jchambers:day-time","ref":"day-time","sha":"29bec20b3168c3cfb4e69312d8372641aa889b48","user":{"login":"jchambers","id":31352,"node_id":"MDQ6VXNlcjMxMzUy","avatar_url":"https://avatars3.githubusercontent.com/u/31352?v=4","gravatar_id":"","url":"https://api.github.com/users/jchambers","html_url":"https://github.com/jchambers","followers_url":"https://api.github.com/users/jchambers/followers","following_url":"https://api.github.com/users/jchambers/following{/other_user}","gists_url":"https://api.github.com/users/jchambers/gists{/gist_id}","starred_url":"https://api.github.com/users/jchambers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchambers/subscriptions","organizations_url":"https://api.github.com/users/jchambers/orgs","repos_url":"https://api.github.com/users/jchambers/repos","events_url":"https://api.github.com/users/jchambers/events{/privacy}","received_events_url":"https://api.github.com/users/jchambers/received_events","type":"User","site_admin":false},"repo":{"id":149895118,"node_id":"MDEwOlJlcG9zaXRvcnkxNDk4OTUxMTg=","name":"threeten-extra","full_name":"jchambers/threeten-extra","private":false,"owner":{"login":"jchambers","id":31352,"node_id":"MDQ6VXNlcjMxMzUy","avatar_url":"https://avatars3.githubusercontent.com/u/31352?v=4","gravatar_id":"","url":"https://api.github.com/users/jchambers","html_url":"https://github.com/jchambers","followers_url":"https://api.github.com/users/jchambers/followers","following_url":"https://api.github.com/users/jchambers/following{/other_user}","gists_url":"https://api.github.com/users/jchambers/gists{/gist_id}","starred_url":"https://api.github.com/users/jchambers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jchambers/subscriptions","organizations_url":"https://api.github.com/users/jchambers/orgs","repos_url":"https://api.github.com/users/jchambers/repos","events_url":"https://api.github.com/users/jchambers/events{/privacy}","received_events_url":"https://api.github.com/users/jchambers/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jchambers/threeten-extra","description":"Provides additional date-time classes that complement those in JDK 8","fork":true,"url":"https://api.github.com/repos/jchambers/threeten-extra","forks_url":"https://api.github.com/repos/jchambers/threeten-extra/forks","keys_url":"https://api.github.com/repos/jchambers/threeten-extra/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jchambers/threeten-extra/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jchambers/threeten-extra/teams","hooks_url":"https://api.github.com/repos/jchambers/threeten-extra/hooks","issue_events_url":"https://api.github.com/repos/jchambers/threeten-extra/issues/events{/number}","events_url":"https://api.github.com/repos/jchambers/threeten-extra/events","assignees_url":"https://api.github.com/repos/jchambers/threeten-extra/assignees{/user}","branches_url":"https://api.github.com/repos/jchambers/threeten-extra/branches{/branch}","tags_url":"https://api.github.com/repos/jchambers/threeten-extra/tags","blobs_url":"https://api.github.com/repos/jchambers/threeten-extra/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jchambers/threeten-extra/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jchambers/threeten-extra/git/refs{/sha}","trees_url":"https://api.github.com/repos/jchambers/threeten-extra/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jchambers/threeten-extra/statuses/{sha}","languages_url":"https://api.github.com/repos/jchambers/threeten-extra/languages","stargazers_url":"https://api.github.com/repos/jchambers/threeten-extra/stargazers","contributors_url":"https://api.github.com/repos/jchambers/threeten-extra/contributors","subscribers_url":"https://api.github.com/repos/jchambers/threeten-extra/subscribers","subscription_url":"https://api.github.com/repos/jchambers/threeten-extra/subscription","commits_url":"https://api.github.com/repos/jchambers/threeten-extra/commits{/sha}","git_commits_url":"https://api.github.com/repos/jchambers/threeten-extra/git/commits{/sha}","comments_url":"https://api.github.com/repos/jchambers/threeten-extra/comments{/number}","issue_comment_url":"https://api.github.com/repos/jchambers/threeten-extra/issues/comments{/number}","contents_url":"https://api.github.com/repos/jchambers/threeten-extra/contents/{+path}","compare_url":"https://api.github.com/repos/jchambers/threeten-extra/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jchambers/threeten-extra/merges","archive_url":"https://api.github.com/repos/jchambers/threeten-extra/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jchambers/threeten-extra/downloads","issues_url":"https://api.github.com/repos/jchambers/threeten-extra/issues{/number}","pulls_url":"https://api.github.com/repos/jchambers/threeten-extra/pulls{/number}","milestones_url":"https://api.github.com/repos/jchambers/threeten-extra/milestones{/number}","notifications_url":"https://api.github.com/repos/jchambers/threeten-extra/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jchambers/threeten-extra/labels{/name}","releases_url":"https://api.github.com/repos/jchambers/threeten-extra/releases{/id}","deployments_url":"https://api.github.com/repos/jchambers/threeten-extra/deployments","created_at":"2018-09-22T16:30:21Z","updated_at":"2018-09-22T16:30:23Z","pushed_at":"2018-09-24T23:56:15Z","git_url":"git://github.com/jchambers/threeten-extra.git","ssh_url":"git@github.com:jchambers/threeten-extra.git","clone_url":"https://github.com/jchambers/threeten-extra.git","svn_url":"https://github.com/jchambers/threeten-extra","homepage":"http://www.threeten.org/threeten-extra/","size":1297,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ThreeTen:master","ref":"master","sha":"bb847793d5ddfbd697f3ffca9ddee4dd26791a3f","user":{"login":"ThreeTen","id":873264,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg3MzI2NA==","avatar_url":"https://avatars1.githubusercontent.com/u/873264?v=4","gravatar_id":"","url":"https://api.github.com/users/ThreeTen","html_url":"https://github.com/ThreeTen","followers_url":"https://api.github.com/users/ThreeTen/followers","following_url":"https://api.github.com/users/ThreeTen/following{/other_user}","gists_url":"https://api.github.com/users/ThreeTen/gists{/gist_id}","starred_url":"https://api.github.com/users/ThreeTen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThreeTen/subscriptions","organizations_url":"https://api.github.com/users/ThreeTen/orgs","repos_url":"https://api.github.com/users/ThreeTen/repos","events_url":"https://api.github.com/users/ThreeTen/events{/privacy}","received_events_url":"https://api.github.com/users/ThreeTen/received_events","type":"Organization","site_admin":false},"repo":{"id":6742151,"node_id":"MDEwOlJlcG9zaXRvcnk2NzQyMTUx","name":"threeten-extra","full_name":"ThreeTen/threeten-extra","private":false,"owner":{"login":"ThreeTen","id":873264,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg3MzI2NA==","avatar_url":"https://avatars1.githubusercontent.com/u/873264?v=4","gravatar_id":"","url":"https://api.github.com/users/ThreeTen","html_url":"https://github.com/ThreeTen","followers_url":"https://api.github.com/users/ThreeTen/followers","following_url":"https://api.github.com/users/ThreeTen/following{/other_user}","gists_url":"https://api.github.com/users/ThreeTen/gists{/gist_id}","starred_url":"https://api.github.com/users/ThreeTen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThreeTen/subscriptions","organizations_url":"https://api.github.com/users/ThreeTen/orgs","repos_url":"https://api.github.com/users/ThreeTen/repos","events_url":"https://api.github.com/users/ThreeTen/events{/privacy}","received_events_url":"https://api.github.com/users/ThreeTen/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ThreeTen/threeten-extra","description":"Provides additional date-time classes that complement those in JDK 8","fork":false,"url":"https://api.github.com/repos/ThreeTen/threeten-extra","forks_url":"https://api.github.com/repos/ThreeTen/threeten-extra/forks","keys_url":"https://api.github.com/repos/ThreeTen/threeten-extra/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ThreeTen/threeten-extra/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ThreeTen/threeten-extra/teams","hooks_url":"https://api.github.com/repos/ThreeTen/threeten-extra/hooks","issue_events_url":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/events{/number}","events_url":"https://api.github.com/repos/ThreeTen/threeten-extra/events","assignees_url":"https://api.github.com/repos/ThreeTen/threeten-extra/assignees{/user}","branches_url":"https://api.github.com/repos/ThreeTen/threeten-extra/branches{/branch}","tags_url":"https://api.github.com/repos/ThreeTen/threeten-extra/tags","blobs_url":"https://api.github.com/repos/ThreeTen/threeten-extra/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ThreeTen/threeten-extra/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ThreeTen/threeten-extra/git/refs{/sha}","trees_url":"https://api.github.com/repos/ThreeTen/threeten-extra/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ThreeTen/threeten-extra/statuses/{sha}","languages_url":"https://api.github.com/repos/ThreeTen/threeten-extra/languages","stargazers_url":"https://api.github.com/repos/ThreeTen/threeten-extra/stargazers","contributors_url":"https://api.github.com/repos/ThreeTen/threeten-extra/contributors","subscribers_url":"https://api.github.com/repos/ThreeTen/threeten-extra/subscribers","subscription_url":"https://api.github.com/repos/ThreeTen/threeten-extra/subscription","commits_url":"https://api.github.com/repos/ThreeTen/threeten-extra/commits{/sha}","git_commits_url":"https://api.github.com/repos/ThreeTen/threeten-extra/git/commits{/sha}","comments_url":"https://api.github.com/repos/ThreeTen/threeten-extra/comments{/number}","issue_comment_url":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/comments{/number}","contents_url":"https://api.github.com/repos/ThreeTen/threeten-extra/contents/{+path}","compare_url":"https://api.github.com/repos/ThreeTen/threeten-extra/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ThreeTen/threeten-extra/merges","archive_url":"https://api.github.com/repos/ThreeTen/threeten-extra/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ThreeTen/threeten-extra/downloads","issues_url":"https://api.github.com/repos/ThreeTen/threeten-extra/issues{/number}","pulls_url":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls{/number}","milestones_url":"https://api.github.com/repos/ThreeTen/threeten-extra/milestones{/number}","notifications_url":"https://api.github.com/repos/ThreeTen/threeten-extra/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ThreeTen/threeten-extra/labels{/name}","releases_url":"https://api.github.com/repos/ThreeTen/threeten-extra/releases{/id}","deployments_url":"https://api.github.com/repos/ThreeTen/threeten-extra/deployments","created_at":"2012-11-18T01:01:13Z","updated_at":"2018-10-17T05:45:16Z","pushed_at":"2018-10-28T09:21:43Z","git_url":"git://github.com/ThreeTen/threeten-extra.git","ssh_url":"git@github.com:ThreeTen/threeten-extra.git","clone_url":"https://github.com/ThreeTen/threeten-extra.git","svn_url":"https://github.com/ThreeTen/threeten-extra","homepage":"http://www.threeten.org/threeten-extra/","size":1292,"stargazers_count":181,"watchers_count":181,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":39,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":39,"open_issues":9,"watchers":181,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109"},"html":{"href":"https://github.com/ThreeTen/threeten-extra/pull/109"},"issue":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/109"},"comments":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/issues/109/comments"},"review_comments":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109/comments"},"review_comment":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/pulls/109/commits"},"statuses":{"href":"https://api.github.com/repos/ThreeTen/threeten-extra/statuses/29bec20b3168c3cfb4e69312d8372641aa889b48"}},"author_association":"NONE"}}
{"actor":{"display_login":"jchambers"}}