fork(3) download
  1. using System;
  2.  
  3. public class Test
  4. {
  5. public static void Main()
  6. {
  7. {
  8. Extensions.EnableKindFix = false;
  9. var now = DateTime.Now.RoundToNearest(TimeSpan.FromMinutes(1));
  10. Console.WriteLine(now + " --- " + now.Kind);
  11. var nowFT = now.ToFileTimeUtc();
  12. var nowDT = DateTime.FromFileTime(nowFT);
  13. Console.WriteLine(nowDT);
  14. }
  15. {
  16. Extensions.EnableKindFix = true;
  17. var now = DateTime.Now.RoundToNearest(TimeSpan.FromMinutes(1));
  18. Console.WriteLine(now + " --- " + now.Kind);
  19. var nowFT = now.ToFileTimeUtc();
  20. var nowDT = DateTime.FromFileTime(nowFT);
  21. Console.WriteLine(nowDT);
  22. }
  23. }
  24. }
  25.  
  26. static class Extensions
  27. {
  28. public static bool EnableKindFix { get; set; }
  29.  
  30. public static DateTime RoundUp(this DateTime dt, TimeSpan d)
  31. {
  32. var delta = (d.Ticks - (dt.Ticks % d.Ticks)) % d.Ticks;
  33. return EnableKindFix
  34. ? new DateTime(dt.Ticks + delta, dt.Kind)
  35. : new DateTime(dt.Ticks + delta);
  36. }
  37.  
  38. public static DateTime RoundDown(this DateTime dt, TimeSpan d)
  39. {
  40. var delta = dt.Ticks % d.Ticks;
  41. return EnableKindFix
  42. ? new DateTime(dt.Ticks - delta, dt.Kind)
  43. : new DateTime(dt.Ticks - delta);
  44. }
  45.  
  46. public static DateTime RoundToNearest(this DateTime dt, TimeSpan d)
  47. {
  48. var delta = dt.Ticks % d.Ticks;
  49. bool roundUp = delta > d.Ticks / 2;
  50.  
  51. return roundUp ? dt.RoundUp(d) : dt.RoundDown(d);
  52. }
  53. }
  54.  
Success #stdin #stdout 0.07s 24488KB
stdin
Standard input is empty
stdout
3/31/2015 8:15:00 AM --- Unspecified
3/31/2015 8:15:00 AM
3/31/2015 8:15:00 AM --- Local
3/31/2015 8:15:00 AM