SDate: fixes to new methods

- FromWorldDate: replace with explicit operator SDate
- ToWorldDate: replace with explicit operator WorldDate
- ToLocaleString: use Utility.getDateStringFor directly
- FromDaysSinceStart: reinterpret exception to an appropriate one
This commit is contained in:
Kevin Daughtridge 2020-04-13 23:29:56 -07:00
parent 49c2ee517d
commit 7a60dc4ee9
1 changed files with 22 additions and 15 deletions

View File

@ -66,18 +66,18 @@ namespace StardewModdingAPI.Utilities
return new SDate(Game1.dayOfMonth, Game1.currentSeason, Game1.year, allowDayZero: true);
}
/// <summary>Get the date equivalent to the given WorldDate.</summary>
/// <param name="worldDate">A date returned from a core game property or method.</param>
public static SDate FromWorldDate(WorldDate worldDate)
{
return new SDate(worldDate.DayOfMonth, worldDate.Season, worldDate.Year, allowDayZero: true);
}
/// <summary>Get the date falling the given number of days after 0 spring Y1.</summary>
/// <param name="daysSinceStart">The number of days since 0 spring Y1.</param>
public static SDate FromDaysSinceStart(int daysSinceStart)
{
return new SDate(0, "spring", 1, allowDayZero: true).AddDays(daysSinceStart);
try
{
return new SDate(0, "spring", 1, allowDayZero: true).AddDays(daysSinceStart);
}
catch (ArithmeticException)
{
throw new ArgumentException($"Invalid daysSinceStart '{daysSinceStart}', must be at least 1.");
}
}
/// <summary>Get a new date with the given number of days added.</summary>
@ -118,13 +118,7 @@ namespace StardewModdingAPI.Utilities
/// <summary>Get a string representation of the date in the current game locale.</summary>
public string ToLocaleString()
{
return this.ToWorldDate().Localize();
}
/// <summary>Get the date as an instance of the game's WorldDate class. This is intended for passing to core game methods.</summary>
public WorldDate ToWorldDate()
{
return new WorldDate(this.Year, this.Season, this.Day);
return Utility.getDateStringFor(this.Day, this.SeasonIndex, this.Year);
}
/****
@ -153,6 +147,19 @@ namespace StardewModdingAPI.Utilities
/****
** Operators
****/
/// <summary>Get the SDate equivalent to the given WorldDate.</summary>
/// <param name="worldDate">A date returned from a core game property or method.</param>
public static explicit operator SDate(WorldDate worldDate)
{
return new SDate(worldDate.DayOfMonth, worldDate.Season, worldDate.Year, allowDayZero: true);
}
/// <summary>Get the SDate as an instance of the game's WorldDate class. This is intended for passing to core game methods.</summary>
public static explicit operator WorldDate(SDate date)
{
return new WorldDate(date.Year, date.Season, date.Day);
}
/// <summary>Get whether one date is equal to another.</summary>
/// <param name="date">The base date to compare.</param>
/// <param name="other">The other date to compare.</param>