Example #1
0
 void TestDateTimeFromString(
     string str, int year, int month, int day, int hour = 0, int minute = 0, int second = 0
     )
 {
     Assert.Equal(
         new DateTime(year, month, day, hour, minute, second),
         TimeUtil.DateTimeFromString(str, CustomNow)
         );
 }
Example #2
0
        protected virtual void HandleIntervalCommand(CommandMatch cmd, IChannelMessageEventArgs msg)
        {
            var      dateTimeString = (string)cmd.Arguments[0];
            DateTime?timestamp      = TimeUtil.DateTimeFromString(dateTimeString);

            if (!timestamp.HasValue)
            {
                return;
            }

            DateTime timestampUTC      = timestamp.Value.ToUniversalTime();
            DateTime nowUTC            = DateTime.UtcNow;
            DateTime nowUTCFullSeconds = nowUTC.AddTicks(-(nowUTC.Ticks % TicksPerSecond));

            CalendarTimeSpan diff = TimeComparison.CalendarDifference(nowUTCFullSeconds, timestampUTC);

            var pieces = new List <string>();

            MaybeAddUnit(pieces, diff.Years, "year", "years");
            MaybeAddUnit(pieces, diff.Months, "month", "months");
            MaybeAddUnit(pieces, diff.Days, "day", "days");
            MaybeAddUnit(pieces, diff.Hours, "hour", "hours");
            MaybeAddUnit(pieces, diff.Minutes, "minute", "minutes");
            MaybeAddUnit(pieces, diff.Seconds, "second", "seconds");

            string message;

            if (pieces.Count == 0)
            {
                message = "That’s now!";
            }
            else
            {
                var messageBuilder = new StringBuilder();

                if (pieces.Count > 1)
                {
                    messageBuilder.Append(string.Join(", ", pieces.Take(pieces.Count - 1)));
                    // 1 year, 2 months, 3 days[ and 4 hours]

                    messageBuilder.Append(" and ");
                    // 1 year, 2 months, 3 days and [4 hours]
                }
                messageBuilder.Append(pieces.Last());
                messageBuilder.Append(diff.Negative ? " ago." : " remaining.");

                message = messageBuilder.ToString();
            }

            ConnectionManager.SendChannelMessage(msg.Channel, $"{msg.SenderNickname}: {message}");
        }