C#实现时间戳与标准时间的互转

目录
  • 前言
  • 1.标准时间转时间戳的方法
  • 2.时间戳转为标准时间
  • 3.TimeZone.CurrentTimeZone.ToLocalTime()方法
  • 补充

前言

C# 时间戳与 标准时间的转其实不难,但需要注意下,基准时间的问题。

格林威治时间起点: 1970 年 1 月 1 日的 00:00:00.000

北京时间起点:1970 年 1 月 1 日的 08:00:00.000

昨天我在这里踩坑了,我用的是格林威治时间计算的时间戳,给计算机监控系统。计算机监控系统拿到时间戳换算后的时间总是跟我的对不上。后来发现是这个原因;

1.标准时间转时间戳的方法

/// <summary>
        /// 获取开停机的时间戳
        /// </summary>
        /// <param name="dtime"></param>
        /// <returns></returns>
        public int getTimeSpan(DateTime dtime)
        {
            //格林威治时间
            //var timeSpan_Greenwich = dtime - new DateTime(1970, 1, 1, 0, 0, 0);
            //标准北京时间
            var timeSpan = dtime - new DateTime(1970, 1, 1, 8, 0, 0);
            //或者这样写北京标准时间
            var timeSpan_beijing = dtime - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0));
           return (int)timeSpan.TotalSeconds;        }

2.时间戳转为标准时间

/// <summary>
        /// 时间戳Timestamp转换成日期
        /// </summary>
        /// <param name="timeStamp"></param>
        /// <returns></returns>
        private DateTime GetDateTime(int timeStamp)
        {
            SaveCommand("timeStamp:" + timeStamp);

            DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            long lTime = ((long)timeStamp * 10000000);
            TimeSpan toNow = new TimeSpan(lTime);
            DateTime targetDt = dtStart.Add(toNow);

            if (string.IsNullOrEmpty(targetDt.ToString()))
            {
                targetDt = DateTime.Now;
            }

            SaveCommand("time:" + targetDt.ToString());

            return targetDt;
        }

3.TimeZone.CurrentTimeZone.ToLocalTime()方法

这个方法将一个 DateTime 对象,获取其值为对应于 time 的本地时间。可以看到这个方法格林威治的时间 1970-01-01 00:00:00 转为了北京时间 1970-01-01 08:00:00

补充

C#时间戳和格式化日期互转

</pre><pre name="code" class="csharp">using UnityEngine;
using System.Collections;
using System;  

/// <summary>
/// C#时间格式转换为时间戳(互转)
/// 时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
/// </summary>
public class DateTime_TimeStamp : MonoBehaviour
{
    protected int m_timestamp;  

    /// <summary>
    /// 获取时间戳Timestamp
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    private int GetTimeStamp(DateTime dt)
    {
        DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
        int timeStamp = Convert.ToInt32((dt - dateStart).TotalSeconds);
        return timeStamp;
    }  

    /// <summary>
    /// 时间戳Timestamp转换成日期
    /// </summary>
    /// <param name="timeStamp"></param>
    /// <returns></returns>
    private DateTime GetDateTime(int timeStamp)
    {
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
        long lTime = ((long)timeStamp * 10000000);
        TimeSpan toNow = new TimeSpan(lTime);
        DateTime targetDt = dtStart.Add(toNow);
        return targetDt;
    }  

    /// <summary>
    /// 时间戳Timestamp转换成日期
    /// </summary>
    /// <param name="timeStamp"></param>
    /// <returns></returns>
    private DateTime GetDateTime(string timeStamp)
    {
        DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
        long lTime = long.Parse(timeStamp + "0000000");
        TimeSpan toNow = new TimeSpan(lTime);
        DateTime targetDt = dtStart.Add(toNow);
        return dtStart.Add(toNow);
    }  

    void OnGUI()
    {
        if (GUILayout.Button("获取当前时间的时间戳"))
        {
            DateTime dtNow = DateTime.Now;
            m_timestamp = GetTimeStamp(dtNow);
            Debug.Log(string.Format("获取当前时间的时间戳 = {0} -> {1}", dtNow.ToString("yyyy-MM-dd hh:mm:ss"), m_timestamp));
        }  

        if (GUILayout.Button("将时间戳转换成日期_1"))
        {
            DateTime dt = GetDateTime(m_timestamp);
            Debug.Log(string.Format("将时间戳转换成日期_1 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
        }  

        if (GUILayout.Button("将时间戳转换成日期_2"))
        {
            DateTime dt = GetDateTime(m_timestamp.ToString());
            Debug.Log(string.Format("将时间戳转换成日期_2 = {0} -> {1}", m_timestamp, dt.ToString("yyyy-MM-dd hh:mm:ss")));
        }
    }
}  

到此这篇关于C#实现时间戳与标准时间的互转的文章就介绍到这了,更多相关C#时间戳与标准时间互转内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C# DateTime与时间戳转换实例

    C# DateTime与时间戳的相互转换,包括JavaScript时间戳和Unix的时间戳. 1. 什么是时间戳 首先要清楚JavaScript与Unix的时间戳的区别: JavaScript时间戳:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数. Unix时间戳:是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 可以看出JavaScrip

  • C#时间格式转换为时间戳的方法步骤

    时间戳转换: /// <summary> /// C#时间格式转换为时间戳(互转) /// 时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. /// </summary> public class DateTime_TimeStamp : MonoBehaviour { protected int m_timestamp; /// <summary> /// 获取时间戳Timest

  • C#时间戳基本用法实例分析

    本文实例讲述了C#时间戳基本用法.分享给大家供大家参考.具体如下: 一.C#如何生成一个时间戳 /// <summary> /// 获取时间戳 /// </summary> /// <returns></returns> public static string GetTimeStamp() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Conve

  • C# 时间与时间戳互转的方法(13位)

    目前经常出现的时间有三个: 本地时间(locale time) 格林威治时间(Greenwich Mean Time GMT) 时间协调时间 (Universal Time Coordinated UTC) 时间标准: (1)世界时 世界时是最早的时间标准.在1884年,国际上将1s确定为全年内每日平均长度的1/8.64×104.以此标准形成的时间系统,称为世界时(UT1). 1972年国际上开始使用国际原子时标,从那以后,经过格林威治老天文台本初子午线的时间便被称为世界时(UT2),或称格林威

  • C#实现时间戳的简单方法

    Introduction: 在项目开发中,我们都经常会用到时间戳来进行时间的存储和传递,最常用的Unix时间戳(TimeStamp)是指格林尼治时间1970年1月1日0时(北京时间1970年1月1日8时)起至现在的总秒数(10位)或总毫秒数(13位): Body: 而在C#中.Net框架没有提供现成的获取时间戳的方式,这里分享一个自己实现的时间戳转换工具: /// <summary> /// 时间工具类 /// </summary> public static class Date

  • C#实现时间戳与标准时间的互转

    目录 前言 1.标准时间转时间戳的方法 2.时间戳转为标准时间 3.TimeZone.CurrentTimeZone.ToLocalTime()方法 补充 前言 C# 时间戳与 标准时间的转其实不难,但需要注意下,基准时间的问题. 格林威治时间起点: 1970 年 1 月 1 日的 00:00:00.000 北京时间起点:1970 年 1 月 1 日的 08:00:00.000 昨天我在这里踩坑了,我用的是格林威治时间计算的时间戳,给计算机监控系统.计算机监控系统拿到时间戳换算后的时间总是跟我的

  • 浅谈时间戳与日期时间互转C语言

    浅谈时间戳与日期时间互转C语言 /* * ctime.h * * Created on: May 19, 2016 * */ #ifndef CTIME_H_ #define CTIME_H_ #include "common/micro_type.h" #define OFFSET_SECOND 946684800 /* ��1970/1/1/0/0/0��2000/1/1/0/0/0֮��������� */ //#define OFFSET_SECOND 0 /* ��2000/

  • JS的时间格式化和时间戳转换函数示例详解

    JS的时间格式化和时间戳转换函数 //格式化时间 function dateFormat(fmt,date){ var o = { "M+" : date.getMonth()+1, //月份 "d+" : date.getDate(), //日 "h+" : date.getHours(), //小时 "m+" : date.getMinutes(), //分 "s+" : date.getSeconds

  • Python实现自动计算特定格式的时间差

    目录 功能 附加函数 实例如下 一.获取 "2030-12-02T17:00:00+08:00" 3小时后的时间格式 "2030-12-02T20:00:00+08:00" 二.计算两个时间之间的差值,精确到秒 三.计算两个时间之间的差值,可以精确到毫秒 功能 输入一个特定格式的时间戳,自动获取前进或者后退多少小时之后的时间 附加函数 时间戳转换函数 def date_time_str_to_long(input_date_time_string): ''' 标准时

  • js时间戳和c#时间戳互转方法(推荐)

    实例如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Newtonsoft.Json; namespace TestWeb { public partial class ajax : System.Web.UI.Page { protected voi

  • PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】

    本文实例讲述了PHP基于DateTime类解决Unix时间戳与日期互转问题.分享给大家供大家参考,具体如下: 这个问题主要在32位的系统下出现,64位的不存在这样的问题.php 5.2+提供了DateTime类来处理这样的问题,参考方案如下(请注意时区的处理): //1.Unix时间戳转日期 function unixtime_to_date($unixtime, $timezone = 'PRC') { $datetime = new DateTime("@$unixtime");

  • pandas实现datetime64与unix时间戳互转

    目录 datetime64与unix时间戳互转 unix 时间戳与pandas中的Timestamp互转 datetime模块 pandas默认时间格式转换为unix间戳 举个栗子 样例 datetime64与unix时间戳互转 在用pandas处理数据时,经常要处理一些时间类型数据,经常把pandas时间类型与datetime模块,还有python自带的time模块搞混淆,记录之. unix 时间戳与pandas中的Timestamp互转 import time def unixToTime(

  • 详解MySQL日期 字符串 时间戳互转

    平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转date.字符串转时间戳.时间戳转date,时间戳转字符串)用法,方便日后查看: 涉及的函数 date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp() 函数 str_to_date(str, format) 函数 fro

  • vue.js将unix时间戳转换为自定义时间格式

    本方法通过vue.js filter实现将unix时间戳转换为自定义标准时间格式 <!-- js代码 --> $().ready(function() { <!-- 自定义filter名称为'time' --> Vue.filter('time', <!-- value 格式为13位unix时间戳 --> <!-- 10位unix时间戳可通过value*1000转换为13位格式 --> function(value) { var date = new Dat

随机推荐