Assert.Equal(expectedParsed, parsed);
Assert.Equal(expectedResult, result);
}
+
+ public static TheoryData<string, string, bool, DateTimeUtc> TryParseExact_Test_Fixtures = new TheoryData<string, string, bool, DateTimeUtc>
+ {
+ { "2018-05-06 11:22:33.111", "yyyy-MM-dd HH:mm:ss.fff", true, new DateTimeUtc(2018, 5, 6, 11, 22, 33, 111) },
+ { "2018-05-06 11:22:33.111 +00:00", "yyyy-MM-dd HH:mm:ss.fff zzz", true, new DateTimeUtc(2018, 5, 6, 11, 22, 33, 111) },
+ { "2018-05-06 11:22:33.111 +09:00", "yyyy-MM-dd HH:mm:ss.fff zzz", true, new DateTimeUtc(2018, 5, 6, 2, 22, 33, 111) },
+ { "2018-05-06 11:22:33.111", "yyyy/MM/dd HH:mm:ss", false, DateTimeUtc.MinValue },
+ { "### INVALID ###", "yyyy-MM-dd HH:mm:ss.fff", false, DateTimeUtc.MinValue },
+ };
+
+ [Theory]
+ [MemberData(nameof(TryParseExact_Test_Fixtures))]
+ public void TryParseExact_Test(string input, string format, bool expectedParsed, DateTimeUtc expectedResult)
+ {
+ var parsed = DateTimeUtc.TryParseExact(input, new[] { format }, DateTimeFormatInfo.InvariantInfo, out var result);
+
+ Assert.Equal(expectedParsed, parsed);
+ Assert.Equal(expectedResult, result);
+ }
}
}
Assert.Equal(expected, MyCommon.IsAnimatedGif(filename));
}
- public static IEnumerable<object[]> DateTimeParse_TestCase
+ public static TheoryData<string, DateTimeUtc> DateTimeParse_TestCase = new TheoryData<string, DateTimeUtc>
{
- get
- {
- yield return new object[] {
- "Sun Nov 25 06:10:00 +00:00 2012",
- new DateTime(2012, 11, 25, 6, 10, 0, DateTimeKind.Utc),
- };
- yield return new object[] {
- "Sun, 25 Nov 2012 06:10:00 +00:00",
- new DateTime(2012, 11, 25, 6, 10, 0, DateTimeKind.Utc),
- };
- }
- }
+ { "Sun Nov 25 06:10:00 +00:00 2012", new DateTimeUtc(2012, 11, 25, 6, 10, 0) },
+ { "Sun, 25 Nov 2012 06:10:00 +00:00", new DateTimeUtc(2012, 11, 25, 6, 10, 0) },
+ };
[Theory]
[MemberData(nameof(DateTimeParse_TestCase))]
- public void DateTimeParseTest(string date, DateTime excepted)
- {
- Assert.Equal(excepted, MyCommon.DateTimeParse(date).ToUniversalTime());
- }
+ public void DateTimeParseTest(string date, DateTimeUtc excepted)
+ => Assert.Equal(excepted, MyCommon.DateTimeParse(date));
[DataContract]
public struct JsonData
result = MinValue;
return false;
}
+
+ public static bool TryParseExact(string input, string[] formats, IFormatProvider formatProvider, out DateTimeUtc result)
+ {
+ if (DateTimeOffset.TryParseExact(input, formats, formatProvider, DateTimeStyles.AssumeUniversal, out var datetimeOffset))
+ {
+ result = new DateTimeUtc(datetimeOffset);
+ return true;
+ }
+
+ result = MinValue;
+ return false;
+ }
}
}
}
}
- public static DateTime DateTimeParse(string input)
+ public static DateTimeUtc DateTimeParse(string input)
{
- string[] format = {
+ var formats = new[] {
"ddd MMM dd HH:mm:ss zzzz yyyy",
"ddd, d MMM yyyy HH:mm:ss zzzz",
};
- foreach (var fmt in format)
- {
- if (DateTime.TryParseExact(input,
- fmt,
- DateTimeFormatInfo.InvariantInfo,
- DateTimeStyles.None,
- out var rslt))
- {
- return rslt;
- }
- else
- {
- continue;
- }
- }
+
+ if (DateTimeUtc.TryParseExact(input, formats, DateTimeFormatInfo.InvariantInfo, out var result))
+ return result;
+
TraceOut("Parse Error(DateTimeFormat) : " + input);
- return new DateTime();
+
+ return DateTimeUtc.Now;
}
public static T CreateDataFromJson<T>(string content)
{
var retweeted = status.RetweetedStatus;
- post.CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(retweeted.CreatedAt).ToUniversalTime());
+ post.CreatedAt = MyCommon.DateTimeParse(retweeted.CreatedAt);
//Id
post.RetweetedId = retweeted.Id;
}
else
{
- post.CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(status.CreatedAt).ToUniversalTime());
+ post.CreatedAt = MyCommon.DateTimeParse(status.CreatedAt);
//本文
post.TextFromApi = status.FullText;
entities = status.MergedEntities;
}
//sender_id
//recipient_id
- post.CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(message.CreatedAt).ToUniversalTime());
+ post.CreatedAt = MyCommon.DateTimeParse(message.CreatedAt);
//本文
var textFromApi = message.Text;
//HTMLに整形
{
Eventtype = MyCommon.EVENTTYPE.Retweet,
Event = "retweet",
- CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(xElm.XPathSelectElement("/created_at").Value).ToUniversalTime()),
+ CreatedAt = MyCommon.DateTimeParse(xElm.XPathSelectElement("/created_at").Value),
IsMe = xElm.XPathSelectElement("/user/id_str").Value == this.UserId.ToString(),
Username = xElm.XPathSelectElement("/user/screen_name").Value,
Target = string.Format("@{0}:{1}", new[]
}
var evt = new FormattedEvent();
- evt.CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(eventData.CreatedAt).ToUniversalTime());
+ evt.CreatedAt = MyCommon.DateTimeParse(eventData.CreatedAt);
evt.Event = eventData.Event;
evt.Username = eventData.Source.ScreenName;
evt.IsMe = evt.Username.ToLowerInvariant().Equals(this.Username.ToLowerInvariant());
this.Protect = user.Protected;
this.FriendsCount = user.FriendsCount;
this.FollowersCount = user.FollowersCount;
- this.CreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(user.CreatedAt).ToUniversalTime());
+ this.CreatedAt = MyCommon.DateTimeParse(user.CreatedAt);
this.StatusesCount = user.StatusesCount;
this.Verified = user.Verified;
if (user.Status != null)
{
this.RecentPost = user.Status.FullText;
- this.PostCreatedAt = new DateTimeUtc(MyCommon.DateTimeParse(user.Status.CreatedAt).ToUniversalTime());
+ this.PostCreatedAt = MyCommon.DateTimeParse(user.Status.CreatedAt);
this.PostSource = user.Status.Source;
}
}
this.LabelScreenName.Text = user.ScreenName;
this.LabelName.Text = user.Name;
this.LabelLocation.Text = user.Location ?? "";
- this.LabelCreatedAt.Text = MyCommon.DateTimeParse(user.CreatedAt).ToString();
+ this.LabelCreatedAt.Text = MyCommon.DateTimeParse(user.CreatedAt).ToLocalTimeString();
if (user.Protected)
this.LabelIsProtected.Text = Properties.Resources.Yes;
var html = TweetFormatter.AutoLinkHtml(status.FullText, entities);
html = this.mainForm.createDetailHtml(html +
- " Posted at " + MyCommon.DateTimeParse(status.CreatedAt) +
+ " Posted at " + MyCommon.DateTimeParse(status.CreatedAt).ToLocalTimeString() +
" via " + status.Source);
if (cancellationToken.IsCancellationRequested)