private static string Date_format(double t, int methodId)
{
StringBuilder result = new StringBuilder(60);
double local = LocalTime(t);
if (methodId != Id_toTimeString)
{
AppendWeekDayName(result, WeekDay(local));
result.Append(' ');
AppendMonthName(result, MonthFromTime(local));
result.Append(' ');
Append0PaddedUint(result, DateFromTime(local), 2);
result.Append(' ');
int year = YearFromTime(local);
if (year < 0)
{
result.Append('-');
year = -year;
}
Append0PaddedUint(result, year, 4);
if (methodId != Id_toDateString)
{
result.Append(' ');
}
}
if (methodId != Id_toDateString)
{
Append0PaddedUint(result, HourFromTime(local), 2);
result.Append(':');
Append0PaddedUint(result, MinFromTime(local), 2);
result.Append(':');
Append0PaddedUint(result, SecFromTime(local), 2);
// offset from GMT in minutes. The offset includes daylight
// savings, if it applies.
int minutes = (int)Math.Floor((LocalTZA + DaylightSavingTA(t)) / msPerMinute);
// map 510 minutes to 0830 hours
int offset = (minutes / 60) * 100 + minutes % 60;
if (offset > 0)
{
result.Append(" GMT+");
}
else
{
result.Append(" GMT-");
offset = -offset;
}
Append0PaddedUint(result, offset, 4);
if (timeZoneFormatter == null)
{
timeZoneFormatter = new SimpleDateFormat("zzz");
}
// Find an equivalent year before getting the timezone
// comment. See DaylightSavingTA.
if (t < 0.0)
{
int equiv = EquivalentYear(YearFromTime(local));
double day = MakeDay(equiv, MonthFromTime(t), DateFromTime(t));
t = MakeDate(day, TimeWithinDay(t));
}
result.Append(" (");
DateTime date = Sharpen.Extensions.CreateDate((long)t);
lock (timeZoneFormatter)
{
result.Append(timeZoneFormatter.Format(date));
}
result.Append(')');
}
return result.ToString();
}