Chad Myers keeps tweeting things about dates, and it reminded me of something I read about some cool extension methods to make using dates easier. I can’t find the thing I read (mostly because I didn’t look), but I figured I’d go blog it really quick.
I wanna add some extension methods for int to make getting Dates easier. Something like this
1: [Test] 2: public void days() 3: { 4: var timespan = 1.Days(); 5: Assert.AreEqual(1,timespan.Days); 6: 7: }Oh, cool…. Easy to make it work too. Just like this.
1: public static TimeSpan Days(this int days) 2: { 3: return new TimeSpan(days,0,0,0,0); 4: }Seriously though if I need to get a timespan for one day, really… Look at line 3, that’s some ugly stuff, aint it? I like the extension method.
Lets make it a little more valuable.
1: [Test] 2: public void ago() 3: { 4: var expected = DateTime.Today.AddDays(-2); 5: var actual = 2.Days().Ago(); 6: Assert.AreEqual(expected,actual); 7: }Simple enough to make it work, right?
1: public static DateTime Ago(this TimeSpan timeSpan) 2: { 3: return DateTime.Now.Subtract(timeSpan); 4: }Ok, so now lets get really cute.
1: [Test] 2: public void honest_abe() 3: { 4: var expected = DateTime.Now.AddYears(-87); 5: var actual = 4.Score().And(7).Years().Ago(); 6: 7: Assert.AreEqual(expected.Year,actual.Year); 8: }Wow, I’m stupid, huh? Hehe…
Here’s what I did.
1: public static class DateExtensions 2: { 3: public static TimeSpan Days(this int days) 4: { 5: return new TimeSpan(days,0,0,0,0); 6: } 7: public static TimeSpan Hours(this int hours) 8: { 9: return new TimeSpan(hours,0,0); 10: } 11: public static TimeSpan Minutes(this int minutes) 12: { 13: return new TimeSpan(0,minutes,0); 14: } 15: public static TimeSpan Years(this int years) 16: { 17: var leapYears = years/4; 18: return new TimeSpan(365*years + leapYears, 0, 0, 0); 19: } 20: public static DateTime Ago(this TimeSpan timeSpan) 21: { 22: return DateTime.Now.Subtract(timeSpan); 23: } 24: public static int Score(this int val) 25: { 26: return val*20; 27: } 28: public static int And(this int left,int right) 29: { 30: return left + right; 31: } 32: }Wow, what a stupid blog huh? I think my next blog post is gunna be cool though… think Amazon, think cloud, think Ellemy.CQRS and publishing…
nice method to kill time.
ReplyDeletevery interesting