public static string FormatTimeLong(UTCDate udt, bool secs) { string fmt = "HH':'mm':'ss"; string fmt_long = "HH':'mm':'ss' 'dd'.'MM'.'yyyy"; if (!secs) { fmt = "HH':'mm"; } DateTime dst = udt.ExtractLocal(); string dst_s = dst.ToString(fmt); DateTime std = UTCDate.ResolveDST(dst, udt.DST); string std_s = std.ToString(fmt_long); string local_s = string.Format("{0} ST", dst_s); if (udt.HasDST) { local_s = string.Format("{0} DST [{1} ST]", dst_s, std_s); } DateTime utc = UTCDate.ResolveTimezone(std, udt.Timezone); string utc_s = utc.ToString(fmt_long); string s = string.Format("{0} [{1} UTC]", local_s, utc_s); return s; }
public static string FormatDiagramDate(UTCDate dt) { DateTime date = dt.ExtractLocal(); Month month = (Month) Enum.ToObject(typeof(Month), date.Month-1); string month_s = month.ToString().Substring(0, 3); return string.Format("{0} {1}", month_s, date.Day); }
public static string FormatTime(UTCDate udt) { DateTime dt_local = udt.ExtractLocal(); string fmt = "HH':'mm"; return dt_local.ToString(fmt); }
public void PrintAnalemmaLabel(Graphics g, Color color, Position pos, UTCDate udt) { // northern hemisphere -> june longest, dec shortest int longest = 6; int shortest = 12; // southern hemisphere -> dec longest, june shortest if (pos.LatitudeDegree.Direction == PositionDirection.South) { longest = 12; shortest = 6; } UTCDate udt_inner = new UTCDate(udt.Timezone, udt.DST, udt.Year, longest, 21, udt.Hour, 0, 0); UTCDate udt_outer = new UTCDate(udt.Timezone, udt.DST, udt.Year, shortest, 21, udt.Hour, 0, 0); int hour_inner = udt_inner.ExtractLocal().Hour; int hour_outer = udt_outer.ExtractLocal().Hour; int legend_margin = 20; string legend_inner = null; string legend_outer = null; // we have DST if (udt_inner.IsDST || udt_outer.IsDST) { legend_inner = udt_inner.IsDST ? "DST" : "ST"; legend_outer = udt_outer.IsDST ? "DST" : "ST"; } float font_size = GetLabelFontSize(); string hour_inner_s = Formatter.FormatHour(hour_inner); string hour_outer_s = Formatter.FormatHour(hour_outer); KeyValuePair<Point?,double?> pair_max = FindPointSlopeAtHour(pos, udt_inner); if ((pair_max.Key != null) && (pair_max.Value != null)) { Placement place = SlopeToPlacement(pair_max.Value.Value, pos); using (SolidBrush br_txt = new SolidBrush(color)) using (Font font = new Font(font_face, font_size, GraphicsUnit.Pixel)) { PrintBoundedString(g, font, br_txt, hour_inner_s, pair_max.Key.Value.X, pair_max.Key.Value.Y, place); if ((legend_inner != null) && (hour_inner == 12)) { PrintBoundedString(g, font, br_txt, legend_inner, graph.Origin.X + (int) (1.3 * (double) graph.Delta), pair_max.Key.Value.Y, place, legend_margin); } } } KeyValuePair<Point?,double?> pair_min = FindPointSlopeAtHour(pos, udt_outer); if ((pair_min.Key != null) && (pair_min.Value != null)) { Placement place = SlopeToPlacement( (pair_min.Value.Value + 180.0) % 360.0, pos); using (SolidBrush br_txt = new SolidBrush(color)) using (Font font = new Font(font_face, font_size, GraphicsUnit.Pixel)) { PrintBoundedString(g, font, br_txt, hour_outer_s, pair_min.Key.Value.X, pair_min.Key.Value.Y, place); if ((legend_outer != null) && (hour_outer == 12)) { PrintBoundedString(g, font, br_txt, legend_outer, graph.Origin.X + (int) (1.3 * (double) graph.Delta), pair_min.Key.Value.Y, place, legend_margin); } } } }
public void TestTimezoneOffset() { int year = Rand.GetInt(2, 3000); int mon = Rand.GetInt(1, 12); int day = Rand.GetInt(1, DateTime.DaysInMonth(year, mon)); int hour = Rand.GetInt(0, 23); int min = Rand.GetInt(0, 59); int sec = Rand.GetInt(0, 59); double tz = Rand.GetDouble(3, UTCDate.TIMEZONE_MIN, UTCDate.TIMEZONE_MAX); UTCDate udt = new UTCDate(tz, null, year, mon, day, hour, min, sec); DateTime dt = new DateTime(year, mon, day, hour, min, sec); dt = dt.AddHours(-tz); // resolve tz offset Assert.True(udt.ExtractUTC().CompareTo(dt) == 0); Assert.True(udt.ExtractUTC().Kind == DateTimeKind.Utc); Assert.True(udt.ExtractStandard().Kind == DateTimeKind.Local); Assert.True(udt.ExtractLocal().Kind == DateTimeKind.Local); }
/** * Traverse year and verify dst status. */ private void TestDST(int tz, DaylightTime dst) { DateTime lower = dst.Start; TimeSpan dst_span = dst.Delta; int day = 15; int hour = 12; int min = 0; int sec = 0; for (int i=UTCDate.MONTH_MIN; i<=UTCDate.MONTH_MAX; i++) { // compute dates using UTCDate UTCDate udt = new UTCDate(tz, dst, lower.Year, i, day, hour, min, sec); DateTime dt_utc = udt.ExtractUTC(); DateTime dt_std = udt.ExtractStandard(); DateTime dt_loc = udt.ExtractLocal(); // compute dates manually // utc time -> resolve timezone offset and dst DateTime dt_utc2 = new DateTime(lower.Year, i, day, hour, min, sec, DateTimeKind.Utc); dt_utc2 = dt_utc2.AddHours(-tz); // resolve tz offset if (udt.IsDST) dt_utc2 = dt_utc2.Add(-dst_span); // resolve dst // standard time -> resolve dst only DateTime dt_std2 = new DateTime(lower.Year, i, day, hour, min, sec, DateTimeKind.Local); if (udt.IsDST) dt_std2 = dt_std2.Add(-dst_span); // resolve dst // standard time -> given as input DateTime dt_loc2 = new DateTime(lower.Year, i, day, hour, min, sec, DateTimeKind.Local); Assert.True(dt_utc.CompareTo(dt_utc2) == 0); Assert.True(dt_std.CompareTo(dt_std2) == 0); Assert.True(dt_loc.CompareTo(dt_loc2) == 0); } }