C#-日期时间字符串转时间戳,并且考虑时区问题

        /// <summary>
        /// 假定服务器机器时区为东八,配置timeString也为东八(通常服务器和配置的时区也必须一致)。利用utc相对时间差,计算出对应时间戳
        /// 此方法无需考虑客户端本地时区
        /// </summary>
        /// <param name="timeString">东八时区的时间字符串,格式为"HH:mm:ss"</param>
        private long GetTimestampByTimeStringWithZone(string timeString)
        {
            // 初始化1970年1月1日0点的UTC时间,作为时间戳计算的起点
            DateTime startTime = new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Utc);
            // 获取服务器时间(虽然DateTimeKind.Utc,但是DateTime实际是一个东八的时间)
            var serverDateTime = startTime.AddMilliseconds(TimeUtils.GetServerTimestamp());
            // 获取服务器时间对应的星期几的数字表示(1-7),星期日为0
            var dayOfWeek = (int)serverDateTime.DayOfWeek;
            // 将服务器时间转换为指定格式的字符串,获取日期字符串
            string dateString = serverDateTime.ToString("yyyy-MM-dd");
            // 将时间字符串转换为DateTime对象
            DateTime dateTime = DateTime.ParseExact($"{dateString} {timeString}", "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture,DateTimeStyles.AdjustToUniversal);
            // 计算当前时间与起始时间的差值,并转换为秒,然后转换为长整型作为时间戳
            var timestamp = (long)((dateTime - startTime).TotalSeconds);
            return timestamp;
        }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值