Esempio n. 1
0
        public void FromDateTime_PureDate()
        {
            var date = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Unspecified);
            var unix = UnixTime.FromDateTime(date);

            Assert.AreEqual(unix, "1354320000 +0000");
        }
Esempio n. 2
0
        /// <summary>
        /// 将指定fields中value为DateTime格式的值转为unix_time。若DateTime时间为00:00:00,则LessThan的时间自动加上23:59:59
        /// </summary>
        /// <param name="toUnixtime">是否将时间转为UnixtimeStamp.否则转为"yyyy-MM-dd HH:mm:ss"格式的字符串</param>
        /// <param name="fields">要修改的字段名称</param>
        /// <returns></returns>
        public SearchModel DecorateDateTime(bool toUnixtime, params string[] fields)
        {
            if (this != null && this.Items != null && fields != null) //不为空
            {
                //遍历所有要修改的字段
                this.Items.FindAll(t => fields.Contains(t.Field)).ForEach(e =>
                {
                    DateTime value = new DateTime();
                    if (e.Value != null && DateTime.TryParse(e.Value.ToString(), out value))
                    {
                        //只设置了日期没有时间,截止日期加上23;59:59
                        if (value.Date == value && (e.Method == SearchMethod.LessThan || e.Method == SearchMethod.LessThanOrEqual))
                        {
                            value = value.AddDays(1).AddSeconds(-1);
                        }

                        if (toUnixtime)
                        {
                            e.Value = UnixTime.FromDateTime(value);
                        }
                        else
                        {
                            e.Value = value.ToString("yyyy-MM-dd HH:mm:ss");
                        }
                    }
                });
            }

            return(this);
        }
Esempio n. 3
0
        public IEnumerable <ConditionItem> Transform(ConditionItem item, Type type)
        {
            DateTime willTime;

            if (DateTime.TryParse(item.Value.ToString(), out willTime))
            {
                var method = item.Method;

                if (method == QueryMethod.LessThan || method == QueryMethod.LessThanOrEqual)
                {
                    method = QueryMethod.DateTimeLessThanOrEqual;
                    if (willTime.Hour == 0 && willTime.Minute == 0 && willTime.Second == 0)
                    {
                        willTime = willTime.AddDays(1).AddMilliseconds(-1);
                    }
                }
                object value = null;
                if (type == typeof(DateTime))
                {
                    value = willTime;
                }
                else if (type == typeof(int))
                {
                    value = (int)UnixTime.FromDateTime(willTime);
                }
                else if (type == typeof(long))
                {
                    value = UnixTime.FromDateTime(willTime);
                }
                return(new[] { new ConditionItem(item.Field, method, value) });
            }

            return(new[] { new ConditionItem(item.Field, item.Method, Convert.ChangeType(item.Value, type)) });
        }
Esempio n. 4
0
        [InlineData("1969-01-01 0:00:00", -31536000)]      // Expect negative
        public void FromDateTime_TestResults(string dtStr, int expected)
        {
            DateTime input  = DateTime.Parse(dtStr);
            int      actual = UnixTime.FromDateTime(input);

            Assert.Equal(expected, actual);
        }
Esempio n. 5
0
        public void FromDateTime_DateAndTimeWithMilliseconds()
        {
            var date = new DateTime(2012, 12, 1, 13, 45, 12, 500, DateTimeKind.Unspecified);
            var unix = UnixTime.FromDateTime(date);

            Assert.AreEqual(unix, "1354369512 +0000");
        }
Esempio n. 6
0
        public static DateTime RealTimeToEorzeaTime(DateTime realTime)
        {
            UnixTime actualTime = UnixTime.FromDateTime(realTime);
            var eorzeaUnix = actualTime.Timestamp * EorzeaConstant;

            var eorzeaTime = UnixTime.ToUniversalDateTime(eorzeaUnix);

            return eorzeaTime;
        }
Esempio n. 7
0
        public static DateTime EorzeaTimeToRealTime(DateTime eorzeaTime)
        {
            UnixTime actualTime = UnixTime.FromDateTime(eorzeaTime);
            var realUnix = actualTime.Timestamp / EorzeaConstant;

            var realTime = UnixTime.ToUniversalDateTime(realUnix);

            return realTime;
        }
 static DefaultModelTransformers()
 {
     Dict = Dict ?? new Dictionary <string, Func <string, string> >
     {
         {
             "ToUnixTime", c =>
             {
                 DateTime dt;
                 if (DateTime.TryParse(c, out dt))
                 {
                     return(UnixTime.FromDateTime(dt).ToString());
                 }
                 return("0");
             }
         }
     };
 }
Esempio n. 9
0
        public void Add(string key, object value)
        {
            string strValue;

            if (value == null)
            {
                strValue = null;
            }
            else if (value is string)
            {
                strValue = (string)value;
            }
            else if (value is Nullable <DateTime> )
            {
                Nullable <DateTime> dateTime = value as Nullable <DateTime>;
                strValue = UnixTime.FromDateTime(dateTime.Value).ToString();
            }
            else if (value is Nullable <int> )
            {
                strValue = (value as Nullable <int>).Value.ToString();
            }
            else if (value is Nullable <long> )
            {
                strValue = (value as Nullable <long>).Value.ToString();
            }
            else if (value is Nullable <double> )
            {
                strValue = (value as Nullable <double>).Value.ToString();
            }
            else if (value is Nullable <bool> )
            {
                strValue = (value as Nullable <bool>).Value.ToString().ToLower();
            }
            else
            {
                strValue = value.ToString();
            }

            this.Add(key, strValue);
        }
Esempio n. 10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="item"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public IEnumerable <Filter> Transform(Filter item, Type type)
        {
            DateTime willTime;

            if (DateTime.TryParse(item.Value.ToString(), out willTime))
            {
                var method = item.Operation;

                if (method == OperationType.Less || method == OperationType.LessOrEqual)
                {
                    method = OperationType.DateTimeLessThanOrEqual;
                    if (willTime.Hour == 0 && willTime.Minute == 0 && willTime.Second == 0)
                    {
                        willTime = willTime.AddDays(1).AddMilliseconds(-1);
                    }
                }
                object value = null;
                if (type == typeof(DateTime))
                {
                    value = willTime;
                }
                else if (type == typeof(int))
                {
                    value = (int)UnixTime.FromDateTime(willTime);
                }
                else if (type == typeof(long))
                {
                    value = UnixTime.FromDateTime(willTime);
                }
                return(new[] { new Filter {
                                   Field = item.Field, Operation = method, Value = value
                               } });
            }

            return(new[] { new Filter {
                               Field = item.Field, Operation = item.Operation, Value = Convert.ChangeType(item.Value, type)
                           } });
        }
Esempio n. 11
0
        public async Task Method2(TimeSpan offset)
        {
            //if (offset != DateTimeOffset.Now.Offset)
            {
                DatabaseFunction.SetDateOffset(offset);
            }

            using (var connection = this.database.Connect())
            {
                this.table1.Drop(connection);

                await this.database.InitializeAsync(connection);
            }


            LibraryOwner.SetConfig(new LibraryConfiguration(""));

            var items = new[]
            {
                new Record(GetId()),
                new Record(GetId()),
                new Record(GetId()),
            };

            var testName = "n[Am]e'j)(i%2@2_h'''l @p1";

            items[0].SetName(testName);


            var testName2 = testName.Replace('_', 'f').Replace(']', '-');

            items[1].SetName(testName2);

            var currentTime = DateTimeOffset.Now.ToOffset(offset);

            items[1].DateModified = currentTime - TimeSpan.FromDays(2);
            items[2].DateModified = currentTime;

            await this.database.RequestTransactionAsync(async context =>
            {
                foreach (var item in items)
                {
                    await this.table1.AddAsync(item, context);
                }

                await this.table1.AddAsync(new Record(testName), context);
                await this.table1.AddAsync(new Record(testName2), context);
            });


            using (var connection = this.database.Connect())
            {
                Console.WriteLine("a");
                //0001-01-01 00:00:00 +00:00
                Assert.AreEqual("0",//"0001-01-01 00:00:00 +00:00",
                                this.table1.AsQueryable(connection)
                                .Select <string>(nameof(Record.DateModified))
                                .ToArray()
                                .First());

                Console.WriteLine("b");
                //0001-01-01
                Assert.AreEqual((-offset.TotalSeconds).ToString(),
                                this.table1.AsQueryable(connection)
                                .Select <string>(DatabaseFunction.GetDate(nameof(Record.DateModified)))
                                .ToArray()
                                .First());

                Console.WriteLine("c");
                ////00:00:00
                //Assert.AreEqual("00:00:00",
                //    this.table1.AsQueryable(connection)
                //    .Select<string>($"time({nameof(Record.DateModified)})")
                //    .ToArray()
                //    .First());

                //0001/01/01 0:00:00 +00:00
                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(0), this.table1.AsQueryable(connection)
                                .Select <DateTimeOffset>(nameof(Record.DateModified))
                                .ToArray()
                                .First());


                Console.WriteLine("d");
                var today = DateTimeOffset.Now.ToOffset(offset).ToDate();


                var mods = this.table1.AsQueryable(connection)
                           .Where(DatabaseExpression.AreEqual
                                      (DatabaseFunction.GetDate(nameof(Record.DateModified)),
                                      new DatabaseReference(UnixTime.FromDateTime(today).ToString())))
                           .Select <DateTimeOffset>($"{nameof(Record.DateModified)}")
                           .Take(2)
                           .ToArray();

                Console.WriteLine("e");
                Assert.AreEqual(1, mods.Length);

                Console.WriteLine("f");
                this.AreEqual(new DateTimeOffset(currentTime.Year, currentTime.Month, currentTime.Day,
                                                 currentTime.Hour, currentTime.Minute, currentTime.Second, offset),
                              mods[0]);

                Console.WriteLine("g");
            }
        }
Esempio n. 12
0
 /// <summary>
 /// Writes this field's value to a binary writer.
 /// </summary>
 /// <param name="writer">The binary writer where to write the field's value.</param>
 protected override void WriteValue(BinaryWriter writer)
 {
     writer.Write(Convert.ToUInt32(UnixTime.FromDateTime(Value)));
 }
Esempio n. 13
0
 public override void SetValue(IDbDataParameter parameter, DateTime?value)
 => parameter.Value = (value == null) ? null : (object)UnixTime.FromDateTime(value.Value);
Esempio n. 14
0
 public override void SetValue(IDbDataParameter parameter, DateTime value)
 => parameter.Value = UnixTime.FromDateTime(value);
Esempio n. 15
0
        [InlineData("1900-01-01 0:00:00")] //Too low
        public void FromDateTime_OutOfRange_ExpectException(string dtStr)
        {
            DateTime input = DateTime.Parse(dtStr);

            Assert.Throws <ArgumentOutOfRangeException>(() => UnixTime.FromDateTime(input));
        }
Esempio n. 16
0
        private async Task TestUnixDate(DateTimeOffset date, IDbConnection connection, TimeSpan offset)
        {
            {
                var dateNum = await table1.QueryAsync <long>
                                  (connection, $"Select strftime('%s','{date.ToString("yyyy-MM-dd HH:mm:ss zzz")}')");

                this.AreEqual(date.ToUnixTimeSeconds(), dateNum.FirstOrDefault());
            }
            this.AreEqual(date.ToUniversalTime().ToUnixTimeSeconds(), date.ToUnixTimeSeconds());

            {
                var dateNum = await table1.QueryAsync <long>
                                  (connection, $"Select strftime('%s','{date.ToString("yyyy-MM-dd HH:mm:ss")}')");

                if (date.Offset == default(TimeSpan))
                {
                    this.AreEqual(date.ToUnixTimeSeconds(), dateNum.FirstOrDefault());
                }
                else
                {
                    this.AreNotEqual(date.ToUnixTimeSeconds(), dateNum.FirstOrDefault());
                }
            }
            {
                var dateNum = await table1.QueryAsync <long>
                                  (connection, $"Select strftime('%s','{date.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss")}')");

                this.AreEqual(date.ToUnixTimeSeconds(), dateNum.FirstOrDefault());
            }

            {
                var unixTime = $"strftime('%s','{date.ToString("yyyy-MM-dd HH:mm:ss zzz")}')";
                var unixDate = DatabaseFunction.GetDate(unixTime);

                var dateNum = await table1.QueryAsync <long>
                                  (connection, $"Select {unixDate}");

                if (DateTimeOffset.Now.Offset == offset)
                {
                    this.AreEqual(DatabaseReference.DateOffsetReference(date).ToString(), dateNum.FirstOrDefault().ToString());
                }
                else
                {
                    this.AreEqual(DatabaseReference.DateOffsetReference(date, offset).ToString(), dateNum.FirstOrDefault().ToString());
                }
            }
            {
                var unixTime = $"strftime('%s','{date.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss")}')";
                var unixDate = DatabaseFunction.GetDate(unixTime);

                var dateNum = await table1.QueryAsync <long>
                                  (connection, $"Select {unixDate}");

                if (DateTimeOffset.Now.Offset == offset)
                {
                    this.AreEqual(DatabaseReference.DateOffsetReference(date.ToUniversalTime()).ToString(), dateNum.FirstOrDefault().ToString());
                }
                else
                {
                    this.AreEqual(DatabaseReference.DateOffsetReference(date.ToUniversalTime(), offset).ToString(), dateNum.FirstOrDefault().ToString());
                }
            }
            {
                var container = new Table1 {
                    DateOffset = date
                };

                using (var tr = connection.BeginTransaction())
                {
                    await table1.ReplaceAsync(container, connection, tr);

                    tr.Commit();
                }

                container.DateOffset = date.AddSeconds(1);

                var dateNum = await table1.QueryAsync <string>
                                  (connection, $"Select DateOffset FROM {table1.Name} WHERE (DateOffset+1) == @DateOffset", container);

                Assert.AreEqual(1, dateNum.Count());
                this.AreEqual(UnixTime.FromDateTime(date).ToString(), dateNum.FirstOrDefault());
            }
        }
 public static DatabaseReference DateTimeOffsetReference(DateTimeOffset dateTime)
 => new DatabaseReference(UnixTime.FromDateTime(dateTime).ToString());
 public static DatabaseReference DateOffsetReference(DateTimeOffset dateTime, TimeSpan offset)
 => new DatabaseReference(UnixTime.FromDateTime(dateTime.ToOffset(offset).ToDate()).ToString());