Slecht, want het gooit gewoon een aantal ongerelateerde functionaliteiten op één hoop. In het geval van de Unix time conversie vergeet je trouwens ook de Unix epoch in UTC aan te maken. In plaats daarvan krijgt deze dan DateTimeKind.Unspecified toegekend. Het werkt gelukkig wel, omdat DateTime.Subtract de DateTimeKind en DateTimeOffset (tijdzone) negeert, maar het is absoluut niet netjes. Verder heb ik wat vraagtekens bij het gebruik van Math.Round voor het afronden. Ik zou in het geval van tijd in seconden eerder met Math.Floor werken.Noxious schreef op donderdag 28 april 2011 @ 13:09:
Hoe slecht is mijn helper class?Ik heb vernomen dat 'ie ranzig is
C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 namespace TSMServiceHelper { static class TsmLogic { public static double GetUnixTime() { var ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0); return Math.Round(ts.TotalSeconds); } public static string StripSlashes(string input) { return System.Text.RegularExpressions.Regex.Replace(input, @"(\\)([\000\010\011\012\015\032\042\047\134\140])", "$2"); } } }
Voor een algemene Unix time conversie schrijf je beter een simpele extension method, zoals het volgende:
C#:
1
2
3
4
5
6
7
8
9
10
| [EditorBrowsable(EditorBrowsableState.Never)] public static class DateTimeExtensions { private readonly DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long ToUnixTime(this DateTime source) { return (long)Math.Floor(source.ToUniversalTime().Subtract(unixEpoch).TotalSeconds); } } |
(Let trouwens wel dat zo'n naïve conversie eigenlijk altijd onnauwkeurig is, want er wordt geen rekening gehouden met de leap seconds die UTC bevat.)
Wat betreft het strippen van slashes is er wat meer context nodig. Waarvoor wordt het gebruikt?
(Waarom is de regex trouwens niet pre-compiled?)