<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erik Christensen</title>
    <description>The latest articles on DEV Community by Erik Christensen (@erikchristensen).</description>
    <link>https://dev.to/erikchristensen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F282555%2F53020736-24a5-4829-a4a2-ff8745b29c6e.jpg</url>
      <title>DEV Community: Erik Christensen</title>
      <link>https://dev.to/erikchristensen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erikchristensen"/>
    <language>en</language>
    <item>
      <title>Island Time 0.2.0 is out</title>
      <dc:creator>Erik Christensen</dc:creator>
      <pubDate>Thu, 12 Mar 2020 03:20:51 +0000</pubDate>
      <link>https://dev.to/erikchristensen/island-time-0-2-0-is-out-3ig6</link>
      <guid>https://dev.to/erikchristensen/island-time-0-2-0-is-out-3ig6</guid>
      <description>&lt;p&gt;I'm pleased to announce that Island Time 0.2.0 is now available. If you're not familiar with &lt;a href="https://github.com/erikc5000/island-time"&gt;Island Time&lt;/a&gt;, you might want to first check out &lt;a href="https://dev.to/erikc5000/introducing-island-time-a-kotlin-multiplatform-library-for-working-with-dates-and-times-46jn"&gt;this&lt;/a&gt; introductory post. In summary, it lets you write date and time code that'll run on the JVM, Android, iOS, and all other Apple platforms while offering a nice Kotlin API that's heavily inspired by the java.time library.&lt;/p&gt;

&lt;p&gt;In addition to support for Kotlin 1.3.70, a number of new features have been added -- and bugs squashed. You can find the full release notes &lt;a href="https://github.com/erikc5000/island-time/releases/tag/0.2.0"&gt;here&lt;/a&gt;, but I'll run through some of the notable features and talk a little about where things are going.&lt;/p&gt;

&lt;h2&gt;
  
  
  Locale support
&lt;/h2&gt;

&lt;p&gt;The biggest new feature is support for localized text and week definitions.&lt;/p&gt;

&lt;p&gt;While most platforms these days are using data from the &lt;a href="http://cldr.unicode.org/"&gt;Unicode CLDR&lt;/a&gt; under the hood, what version they're using and how much of it is exposed through their APIs varies considerably. Island Time attempts to provide a common interface to these platform APIs while also giving you the flexibility to use data from different sources or customize the behavior where needed via &lt;code&gt;DateTimeTextProvider&lt;/code&gt; and &lt;code&gt;TimeZoneTextProvider&lt;/code&gt; interfaces.&lt;/p&gt;

&lt;h4&gt;
  
  
  Localized text
&lt;/h4&gt;

&lt;p&gt;It's now possible to access the localized names of months, days of the week, time zones, and more.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get the system default locale. We'll assume this is "en_US".&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defaultLocale&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;// "Feb"&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;shortMonthName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Month&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FEBRUARY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;localizedName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TextStyle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SHORT_STANDALONE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// "Eastern Daylight Time"&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;tzName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TimeZone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"America/New_York"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TimeZoneTextStyle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DAYLIGHT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For applicable classes, you'll find a &lt;code&gt;localizedName()&lt;/code&gt; method that returns &lt;code&gt;null&lt;/code&gt; if text is unavailable for the provided style and locale. And then a &lt;code&gt;displayName()&lt;/code&gt; method that will instead return a default value if localized text is unavailable, such as the month or day of week number.&lt;/p&gt;

&lt;p&gt;Island Time's &lt;code&gt;Locale&lt;/code&gt; is simply a typealias for &lt;code&gt;java.util.Locale&lt;/code&gt; or &lt;code&gt;NSLocale&lt;/code&gt;. The &lt;code&gt;defaultLocale()&lt;/code&gt; method allows you to access the system default locale in common code. If you want to use a specific locale, you should create it in platform-specific code and inject it.&lt;/p&gt;

&lt;p&gt;You can also parse localized text, though results may vary between different platforms and versions -- and writing locale-agnostic parsers is non-trivial, so please be mindful of that. While it can be useful in some situations (which is why this feature is available), it should be avoided where possible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;customParser&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dateTimeParser&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;localizedMonth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;setOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TextStyle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SHORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;TextStyle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;LONG&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;+&lt;/span&gt;&lt;span class="sc"&gt;' '&lt;/span&gt;
    &lt;span class="nf"&gt;dayOfMonth&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;+&lt;/span&gt;&lt;span class="s"&gt;", "&lt;/span&gt;
    &lt;span class="nf"&gt;year&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Feb 29, 2020"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toDate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customParser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2020-02-29&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Localized week definitions
&lt;/h4&gt;

&lt;p&gt;In addition to localized text, there's also support for localized week definitions. Depending on the locale, the week might start on Sunday, Monday, or Saturday -- and some platforms, such as macOS and iOS, allow the user to customize this independently from the locale settings.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;WeekSettings&lt;/code&gt; class has been introduced to provide control over this behavior when using week-related methods. &lt;code&gt;WeekSettings.systemDefault()&lt;/code&gt; will usually be the most desirable construction method since it respects the user's system settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Start of ISO week (Monday start)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;isoStart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;startOfWeek&lt;/span&gt;

&lt;span class="c1"&gt;// Start of week using Sunday as start&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;sundayStart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startOfWeek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WeekSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SUNDAY_START&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Respect the user's system settings&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;systemStart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startOfWeek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WeekSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;// Use the default associated with a particular locale&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;localeStart&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;startOfWeek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;explicitLocale&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Week range/interval operators
&lt;/h2&gt;

&lt;p&gt;New operators have also been added to make it easier to get the range of the week from a date or date-time. As an example, you could obtain an interval between the starting and ending instants of a week by doing the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get the date range of the current week&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;weekRange&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;DateRange&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;weekRange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WeekSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;// Convert it into the interval between the starting and ending instants of that week&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;weekInterval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;InstantInterval&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;weekRange&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toInstantIntervalAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TimeZone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;systemDefault&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Serializers for Kotlin Serialization
&lt;/h2&gt;

&lt;p&gt;The serialization-extensions artifact provides a set of custom serializers ready to use with &lt;a href="https://github.com/Kotlin/kotlinx.serialization"&gt;kotlinx.serialization&lt;/a&gt;. These will allow you to serialize all date-time primitives, durations, and ranges as ISO-compatible strings, well-suited for JSON.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Serializable&lt;/span&gt;
&lt;span class="kd"&gt;data class&lt;/span&gt; &lt;span class="nc"&gt;MyDto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nd"&gt;@Serializable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DateRangeSerializer&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;dateRange&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;DateRange&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Parcelers for &lt;code&gt;@Parcelize&lt;/code&gt; in the Kotlin Android Extensions
&lt;/h2&gt;

&lt;p&gt;Similarly, the parcelize-extensions artifact provides a set of custom parcelers ready to use with the &lt;a href="https://kotlinlang.org/docs/tutorials/android-plugin.html#parcelable-implementations-generator"&gt;&lt;code&gt;Parcelable&lt;/code&gt; implementation generator&lt;/a&gt; provided by the Kotlin Android Extensions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Parcelize&lt;/span&gt;
&lt;span class="nd"&gt;@TypeParceler&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;DateParceler&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
&lt;span class="kd"&gt;data class&lt;/span&gt; &lt;span class="nc"&gt;MyParcelable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Parcelable&lt;/span&gt;

&lt;span class="nd"&gt;@Parcelize&lt;/span&gt;
&lt;span class="nd"&gt;@TypeParceler&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt; &lt;span class="nc"&gt;NullableDateParceler&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;
&lt;span class="kd"&gt;data class&lt;/span&gt; &lt;span class="nc"&gt;MyParcelableWithNull&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Parcelable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Future directions
&lt;/h2&gt;

&lt;p&gt;At KotlinConf, JetBrains announced that they're working on their own date-time library. At this time, it's unclear what the feature set will look like and when it'll be ready.&lt;/p&gt;

&lt;p&gt;Island Time is quite usable today and will continue to live on for the foreseeable future, serving as an alternative that will perhaps better satisfy certain needs. A number of new features and enhancements are in the pipeline already and will be making their way out in the coming months, including support for custom date-time formats. Stay tuned and coronavirus-free.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>kotlinmultiplatform</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Introducing Island Time - A Kotlin Multiplatform library for working with dates and times</title>
      <dc:creator>Erik Christensen</dc:creator>
      <pubDate>Sat, 30 Nov 2019 00:38:50 +0000</pubDate>
      <link>https://dev.to/erikchristensen/introducing-island-time-a-kotlin-multiplatform-library-for-working-with-dates-and-times-46jn</link>
      <guid>https://dev.to/erikchristensen/introducing-island-time-a-kotlin-multiplatform-library-for-working-with-dates-and-times-46jn</guid>
      <description>&lt;p&gt;One major gap when writing multiplatform Kotlin code so far has been the lack of a quality date and time library. That is to say, something that doesn't feel like a big step backwards for those used to working with java.time or the ThreeTen backport.&lt;/p&gt;

&lt;p&gt;Island Time is a project that seeks to rectify this situation. It's inspired heavily by the java.time library, embracing many of the core classes and concepts. But it's not a strict port either, taking inspiration from other date-time libraries as well with the goal being to (ultimately) create a powerful library that enables a wide array of use cases while providing a more friendly, extension-oriented API that takes full advantage of Kotlin language features.&lt;/p&gt;

&lt;p&gt;It's still early days, but I'm pleased to announce the first versioned release -- 0.1.0.&lt;/p&gt;

&lt;p&gt;Some of the current features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A set of date-time primitives such as &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;Time&lt;/code&gt;, &lt;code&gt;DateTime&lt;/code&gt;, &lt;code&gt;Instant&lt;/code&gt;, and &lt;code&gt;ZonedDateTime&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Time zone database support&lt;/li&gt;
&lt;li&gt;Date ranges and time intervals, integrating with Kotlin ranges and progressions&lt;/li&gt;
&lt;li&gt;Read and write strings in ISO formats&lt;/li&gt;
&lt;li&gt;DSL-based definition of custom parsers&lt;/li&gt;
&lt;li&gt;Operators like &lt;code&gt;date.next(MONDAY)&lt;/code&gt; or &lt;code&gt;dateTime.startOfWeek&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Works on JVM, Android, iOS, and macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, there are limitations. Most notably:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No custom and/or localized format strings&lt;/li&gt;
&lt;li&gt;No localized week fields&lt;/li&gt;
&lt;li&gt;Only supports the ISO calendar system&lt;/li&gt;
&lt;li&gt;Year range currently restricted to 1-9999&lt;/li&gt;
&lt;li&gt;No Javascript support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find a lot more information on the &lt;a href="https://github.com/erikc5000/island-time"&gt;Github page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Development is "moving fast" and the API is likely to experience changes. In its current state though, it's a quite usable library that I suspect might satisfy the needs of quite a few of you. It certainly unblocked me in taking a chunk of my own Android app's code and making it multiplatform-friendly.&lt;/p&gt;

&lt;p&gt;Feedback is much appreciated. There are plenty of warts and design issues that are yet to be resolved and your comments -- and contributions, if you're so inclined -- can all help make this a better library.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>android</category>
      <category>ios</category>
      <category>kotlinmultiplatform</category>
    </item>
  </channel>
</rss>
