public void CanLoadNodaTimeResourceFromOnePointZeroRelease() { #pragma warning disable 0618 var source = new TzdbDateTimeZoneSource("NodaTime.Test.TestData.Tzdb2012iFromNodaTime1.0", Assembly.GetExecutingAssembly()); #pragma warning restore 0618 Assert.AreEqual("TZDB: 2012i (mapping: 6356)", source.VersionId); var utc = Instant.FromUtc(2007, 8, 24, 9, 30, 0); // Test a regular zone with rules. var london = source.ForId("Europe/London"); var inLondon = new ZonedDateTime(utc, london); var expectedLocal = new LocalDateTime(2007, 8, 24, 10, 30); Assert.AreEqual(expectedLocal, inLondon.LocalDateTime); // Test a fixed-offset zone. var utcFixed = source.ForId("Etc/UTC"); var inUtcFixed = new ZonedDateTime(utc, utcFixed); expectedLocal = new LocalDateTime(2007, 8, 24, 9, 30); Assert.AreEqual(expectedLocal, inUtcFixed.LocalDateTime); // Test an alias. var jersey = source.ForId("Japan"); // Asia/Tokyo var inJersey = new ZonedDateTime(utc, jersey); expectedLocal = new LocalDateTime(2007, 8, 24, 18, 30); Assert.AreEqual(expectedLocal, inJersey.LocalDateTime); // Can't ask for ZoneLocations Assert.Throws <InvalidOperationException>(() => source.ZoneLocations.GetHashCode()); }
internal Zone(TzdbDateTimeZoneSource source, Dictionary <string, TzdbZoneLocation> locations, string id) { Id = id; Aliases = source.Aliases[id]; locations.TryGetValue(id, out var location); Location = location == null ? null : new Location(location); var zone = source.ForId(id); Offsets = zone.GetZoneIntervals(StartOfModernEra, EndOfModernEra) .Select(zi => zi.WallOffset) .Distinct() .OrderBy(x => x) .Select(o => OffsetPattern.GeneralInvariant.Format(o)); }
public void ResourceZoneEquivalence() { var streamSource = TzdbDateTimeZoneSource.Default; #pragma warning disable 0618 var resourceSource = new TzdbDateTimeZoneSource("NodaTime.Test.TestData.Tzdb", Assembly.GetExecutingAssembly()); #pragma warning restore 0618 Assert.AreEqual(streamSource.VersionId, resourceSource.VersionId); CollectionAssert.AreEquivalent(streamSource.GetIds(), resourceSource.GetIds()); var interval = new Interval(Instant.FromUtc(1850, 1, 1, 0, 0), Instant.FromUtc(2050, 1, 1, 0, 0)); var comparer = ZoneEqualityComparer.ForInterval(interval).WithOptions(ZoneEqualityComparer.Options.StrictestMatch); foreach (var id in streamSource.GetIds()) { Assert.IsTrue(comparer.Equals(streamSource.ForId(id), resourceSource.ForId(id)), "Zone {0} is equal under stream and resource formats", id); } }
private static string GetOffset(string timezone) { var result = "0"; if (_tzdbDateTimeZoneSource == null) { using (var stream = File.OpenRead($"{AppDomain.CurrentDomain.BaseDirectory}GeoDb\\tzdb2019c.nzd")) { _tzdbDateTimeZoneSource = TzdbDateTimeZoneSource.FromStream(stream); } } var zonedDateTime = _tzdbDateTimeZoneSource.ForId(timezone) .AtStrictly(new LocalDateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute)); result = TimeSpan.FromMilliseconds(zonedDateTime.Offset.Milliseconds).TotalHours.ToString(); return(result); }
public StatsProvider() { if (string.IsNullOrEmpty(LogDirectory)) { LogDirectory = @"C:\Users\Brady\Documents\BTLogs2"; } logFiles = Directory.EnumerateFiles(LogDirectory) as IEnumerable <string>; usernameMetric = new LoginUsernames(); loginCountMetric = new LoginCounter(); loginTimeMetric = new LoginTimeAccumulator(); messageCountMetric = new TotalMessages(); emoteCountMetric = new UserEmotes(); firstLastLoginMetric = new FirstLastLogin(); TzdbDateTimeZoneSource tzSource = TzdbDateTimeZoneSource.Default; dailyLoginTimeMetrics = new List <LoginTimePerDay>() { new LoginTimePerDay(timezone: tzSource.ForId("US/Pacific")), new LoginTimePerDay(timezone: tzSource.ForId("US/Mountain")), new LoginTimePerDay(timezone: tzSource.ForId("US/Central")), new LoginTimePerDay(timezone: tzSource.ForId("US/Eastern")), new LoginTimePerDay(timezone: tzSource.ForId("Europe/London")), new LoginTimePerDay(timezone: tzSource.ForId("Europe/Berlin")), new LoginTimePerDay(timezone: tzSource.ForId("Europe/Athens")), new LoginTimePerDay(timezone: tzSource.ForId("Asia/Hong_Kong")), new LoginTimePerDay(timezone: tzSource.ForId("Asia/Tokyo")), }; metrics = new List <IMetric>() { usernameMetric, loginCountMetric, loginTimeMetric, messageCountMetric, emoteCountMetric, firstLastLoginMetric }; metrics.AddRange(dailyLoginTimeMetrics); CancellationTokenSource cts = new CancellationTokenSource(); InitializeTask = Task.Factory.StartNew(() => { return(this.CheckForNewFiles(cts.Token)); }) .Unwrap() .ContinueWith(task => { foreach (var file in Directory.EnumerateFiles(LogDirectory)) { using (FileReader reader = new FileReader(file, metrics)) { reader.ReadLines(); } Console.WriteLine($"Done processing {file}"); } }); }