首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将DateTime序列化为时间而不是毫秒和gmt

DateTime序列化为时间而不是毫秒和gmt

序列化一个DateTime对象,我们可以选择将其表示成毫秒数、格林尼治标准时间(GMT)、或者时间(Time)。这里我们将探讨三种表示方法并提供相关解决方案。

一、将 DateTime 序列化为毫秒数

一个通用的做法是使用JavaScript中的Date对象。将DateTime对象转换为Date对象,然后将其转换为毫秒数。以下是一个例子:

代码语言:javascript
复制
function serializeDateTimeToMilliseconds(dateTime: DateTime): number {
    return ToMilliseconds(dateTime);
}

function ToMilliseconds(dateTime: DateTime): number {
    const date: Date = new Date(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second);
    date.setMilliseconds(dateTime.millisecond);
    return date.getTime();
}

// 使用示例:
const dateTime = { year: 2022, month: 10, day: 1, hour: 12, minute: 0, second: 0, millisecond: 0 };
const serializedDateTime = serializeDateTimeToMilliseconds(dateTime);
console.log(serializedDateTime);

二、将 DateTime 序列化为 GMT

将 DateTime 对象转换为日期时间字符串,并用 GMT 字符串分隔开。例如:将日期时间 “2022-10-01 12:00:00” 序列化为 “2022 10:00:00 GMT”。以下是一个示例:

代码语言:javascript
复制
function serializeDateTimeToGMT(dateTime: DateTime): string {
    const dtArr: string[] = dateTime.toISODate().split('T');
    if (dtArr.length === 3) {
        return `${dtArr[0]}T${dtArr[1]+'}'+'{datetime}'T${dtArr[2]}`;
    } else {
        return `${dtArr[0]}T${dtArr[1]+'}'+'{datetime}'`;
    }
}

function getDateTime(UTCString: string): DateTime {
  const isUtc: boolean = !UTCString.split(' ')[1].endsWith('Z');
  const localOffsetGMT8: number= 8*60*60*1000; // UTC-8
  const localOffsetLocal: number = isUtc ? 0 : -localOffsetGMT8;
  let parts = UTCString.split(' ');
  // If the timezone is always positive, then always assume local time (GMT+8)
  parts[0] = parts[0].substring(0, parts[0].length -4); // Remove the timezone offset
  parts[0] = 'yyyy-MM-dd HH:mm:ss'; // Use the local date format (to ensure equal comparison)
  parts[1] = UTCString.split(' ')[1];
  return DateTime.fromISODate(parts[0].concat(parts[1].split('T').join('T')));
}

// 使用示例:
const dateTime = { year: 2022, month: 10, day: 1, hour: 12, minute: 0, second: 0, timezone: 'America/New_York' };
const serializedDateTime = serializeDateTimeToGMT(dateTime);
console.log(serializedDateTime);

// 示例: 将 dateTime 解码为 DateTime
const parsedDateTime = getDateTime(serializedDateTime.trim());
console.log(parsedDateTime);

三、将 DateTime 序列化为时间

将 DateTime 对象转换为时间段(如“12:30:00”)、毫秒数毫秒(如“1970年1月1日00:00:00,0”),或者毫秒数和 GMT 字符串。以下是相关的示例:

代码语言:javascript
复制
// 将 DateTime 序列化为时间字符串:
function serializeDateTimeToTime(dateTime: DateTime): string {
    const hours = dateTime.getHoursOrDefault(0);
    const minutes = dateTime.getMinutesOrDefault(0);
    const seconds = dateTime.getSecondsOrDefault(0);
    const hasMinutesOrSeconds = dateTime.minutes || dateTime.seconds;
    if (hasMinutesOrSeconds) {
        return `${dateTime.hours}:${dateTime.minutes}:${dateTime.seconds}`;
    } else {
        return `${dateTime.hours}:0:0`;
    }
}

// 使用示例
const dateTime = { year: 2022, month: 10, day: 1, hour: 12, minute: 30, second: 0, timezone: 'America/Los_Angeles' };
const serializedDateTime = serializeDateTimeToTime(dateTime);
console.log(serializedDateTime);

// 将 DateTime 序列化为毫秒数和 GMT:
function serializeDateTimeMSGTGMT(dateTime: DateTime): string {
    return `${dateTime.milliseconds}-1970-01-01T00:00:00.0${dateTime.timezone}${dateTime.timezone}${dateTime.timezone}`;
}

// 使用示例:

const serializedDateTime = serializeDateTimeMSGTGMT(dateTime);
console.log(serializedDateTime);

在这些示例中,serializeDateTimeToMillisecondsserializeDateTimeToGMTserializeDateTimeToMSGTGMT 分别将 DateTime 对象转换为毫秒数、GMT 字符串或毫秒数和 GMT 字符串。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python常用内建模块之time、date、datetime

-> 60 seconds 1 hours -> 3600 seconds 1 weeks -> 7 days days、seconds microseconds 为了不产生时间表示上的歧义,...格式化字符串:strftime() strptime() date, datetime, time 对象均支持使用 strftime(format) 方法,指定的日期或时间转换为自定义的格式化字符串...,它没有时区的概念,datetime是有时区的。...datetime转换为str 如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的,同样需要一个日期时间的格式化字符串: >>...本地时间转换为UTC时间 本地时间是指系统设定时区的时间,例如北京时间是UTC+8:00时区的时间UTC时间指UTC+0:00时区的时间

2.3K30
  • Python中的时间处理大总结

    2.从time模块说起 为了学习time模块,我们需要先知道几个与时间相关的概念: (1)epoch 假设我们要将时间表示成毫秒数,比方说1000000毫秒,那有一个问题必须解决,这个1000000毫秒的起点是什么时间...历史上,先有的GMT,后有的UTC. UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间GMT是根据地球的自转公转来计算时间。...看名字大家就应该知道它们的含义, strftime 即 string format time,用来时间格式化成字符串 strptime 即string parse time,用来字符串解析成时间。...一句顺口溜可以帮助记清这个情况: time里面没time 藏在datetime里 编的是不是不咋地?嗯,我也这么觉得。 datetime类就是datetime的组合。...datetime类还提供了一个combine方法,用来一个date对象一个time对象组合成一个datetime对象。

    1.4K40

    python中的时间处理大总结

    从time模块说起 为了学习time模块,我们需要先知道几个与时间相关的概念: 1、epoch 假设我们要将时间表示成毫秒数,比方说1000000毫秒,那有一个问题必须解决,这个1000000毫秒的起点是什么时间...历史上,先有的GMT,后有的UTC. UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间GMT是根据地球的自转公转来计算时间。...看名字大家就应该知道它们的含义, strftime 即 string format time,用来时间格式化成字符串 strptime 即string parse time,用来字符串解析成时间。...一句顺口溜可以帮助记清这个情况: time里面没time 藏在datetime里 编的是不是不咋地?嗯,我也这么觉得。 datetime类就是datetime的组合。...datetime类还提供了一个combine方法,用来一个date对象一个time对象组合成一个datetime对象。

    2K100

    python中的时间处理大总结

    从time模块说起 为了学习time模块,我们需要先知道几个与时间相关的概念: 1、epoch 假设我们要将时间表示成毫秒数,比方说1000000毫秒,那有一个问题必须解决,这个1000000毫秒的起点是什么时间...历史上,先有的GMT,后有的UTC. UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间GMT是根据地球的自转公转来计算时间。...看名字大家就应该知道它们的含义, strftime 即 string format time,用来时间格式化成字符串 strptime 即string parse time,用来字符串解析成时间。...一句顺口溜可以帮助记清这个情况: time里面没time 藏在datetime里 编的是不是不咋地?嗯,我也这么觉得。 datetime类就是datetime的组合。...datetime类还提供了一个combine方法,用来一个date对象一个time对象组合成一个datetime对象。

    1.6K50

    Java常用类库(一):

    Date类: ---- Date类表示特定的瞬间,可以精确到毫秒; 未过时构造方法: Date()//分配并初始化Date对象,以表示分配它的时间(精确到毫秒)。...Date(long date)// 以表示自从标准基准时间(称为“历元(epoch)”,即 //1970 年 1月 1 日 00:00:00 GMT)以来的指定毫秒数...直接打印Date对象是字符串形式不是毫秒数是因为Date类重写了toString方法。...setTime(long time)// 设置此Date对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time毫秒时间点。...String pattern) 常用模式字母: y 年 M 年中的月 d 月中的天 h 一天中的小时数am/pm(1-12) m 小时中的分钟数 s 分钟中的秒数 常用方法: format //日期格式化为字符串

    1.1K30

    为啥活动提前结束了?记 Date 类型的一次踩坑!

    不是前端的问题。...查询 DB 数据 活动结束时间是分为两个字段储存的: endDate (dateTime类型): 2022-06-09endTime(time类型): 23:59:59 java 类型都是用 Date...因为案例里的 2022-06-09 23:59:59, 都是当前时区的时间, 即东 8 区的时间 activityEndTime = endDate.getTime() + endTime.getTime...String toString() { // "EEE MMM dd HH:mm:ss zzz yyyy"; BaseCalendar.Date date = normalize(); //时间戳换算成当前时区的时间...如果你看好一个事情,一定是坚持了才能看到希望,不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

    25210

    isSameDate

    GMT时间 GMT时间指英国格林威治时间,也就是世界标准时间,是0时区的区时。 与我国的标准时间北京时间(东八区)相差8小时,即GMT时间早上6点对应北京时间下午2点。...getTimezoneOffset new Date().getTimezoneOffset方法可以获取本地时间GMT时间之间相差的分钟数。在东八区调用该方法的返回值为-480。...getTimezoneOffset返回值单位是分钟,不是小时,原因是某些国家所占有的时区甚至不到一个小时的间隔。...所以,考虑时区的情况下,以上代码可以写成如下形式: const getLocalISOTime = date => { // 分钟数转化为毫秒数 const offset = date.getTimezoneOffset...() * 60 * 1000; // 去掉误差的本地时间时间戳 const localDate = date.getTime() - offset; // 转化为ISO标准的时间格式

    66010

    (数据科学学习手札137)orjson:Python中最好用的json库

    下面我们来对orjson中的常用方法进行演示: 2.1 序列化   与原生json库类似,我们可以使用orjson.dumps()Python对象序列化为JSON数据,注意,略有不同的是,orjson...序列化的结果并不是str型而是bytes型,在下面的例子中,我们对包含一千万个简单字典元素的列表进行序列化,orjson与json库的耗时比较如下: 2.2 反序列化   JSON数据转换为Python...个空格的缩进美化效果,从而弥补其没有参数indent的不足: OPT_OMIT_MICROSECONDS orjson.dumps()可以直接Python中datetime、time等标准库中的日期时间对象转换成相应的字符串...,这是原生json库做不到的,通过配置option=orjson.OPT_OMIT_MICROSECONDS,可以转换结果后缀的毫秒部分省略掉: OPT_NON_STR_KEYS   当需要序列化的对象存在非数值型键时...类型数据,我们同样可以配合OPT_PASSTHROUGH_DATETIME自定义default函数实现日期自定义格式化转换: orjson更多特性可前往官方仓库https://github.com

    1.6K20

    Python中最值得学习的第三方JSON库

    下面我们来对orjson中的常用方法进行演示: 2.1 序列化 与原生json库类似,我们可以使用orjson.dumps()Python对象序列化为JSON数据,注意,略有不同的是,orjson序列化的结果并不是...str型而是bytes型,在下面的例子中,我们对包含一千万个简单字典元素的列表进行序列化,orjson与json库的耗时比较如下: 2.2 反序列JSON数据转换为Python对象的过程我们称之为反序列化...indent的不足: OPT_OMIT_MICROSECONDS orjson.dumps()可以直接Python中datetime、time等标准库中的日期时间对象转换成相应的字符串,这是原生json...库做不到的,通过配置option=orjson.OPT_OMIT_MICROSECONDS,可以转换结果后缀的毫秒部分省略掉: OPT_NON_STR_KEYS 当需要序列化的对象存在非数值型键时...类型数据,我们同样可以配合OPT_PASSTHROUGH_DATETIME自定义default函数实现日期自定义格式化转换: orjson更多特性可前往官方仓库https://github.com/

    1.3K10

    时间序列 | 字符串日期的相互转换

    本文介绍比较常用的字符串与日期格式互转的方法,是属于时间序列中部分内容。 ---- datetime.datetime datetime毫秒形式存储日期时间。...说明 date 以公历形式存储日期(年、月、日) time 时间存储为时、分、秒、毫秒 datetime 存储日期时间日、秒、毫秒 timedelta 表示两个datetime 值之间的差 --...-- datetime 转换为字符串 datetime.strftime() 利用str或strftime方法(传入一个格式化字符串),datetime对象pandas的Timestamp对象可以被格式化为字符串...比如说,它会把一些原本不是日期的字符串认作是日期(比如"42"会被解析为2042年的今天)。 NaT(Not a Time)是pandas中时间戳数据的null值。...也知道了字符串转化为datetime对象。 在数据处理过程中,特别是在处理时间序列过程中,常常会出现pandas.

    7.2K20

    SQL知识大全(五):SQL中的时间函数

    点击上方蓝字关注我们 今天是SQL知识大全的第五讲,主要内容是时间函数相关,主要包括了常用的时间函数,时间提取函数,时间计算函数以及时间时间戳之间的转换。...常用的时间函数 to_date()函数 to_date()函数字符串的日期转换为时间格式的日期,转换后的时间格式可以是如下形式: 格式 意义 YEAR 年的拼写 MM 数字月 MONTH 月的全拼...expr1 expr2 都是日期或日期时间表达式。运算中只用到了这些值的日期部分。...年-月' 时间时间戳的定义 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。...-1至今的秒,13位的所谓毫秒的是不可以的。

    2K20

    Web开发中的时区问题

    系统时间的改变会影响到JVM的默认时区,所以为了让服务器程序仍处于北京时间,需要通过代码指定时区,如下: TimeZone.setDefault(TimeZone.getTimeZone("GMT+8...加上@JsonFormat注解,指定时区时间格式,便能达到期望的效果,得到的将是北京时间的1号8点1号18点。所以,在前后端传输发生的时区问题,注意时间数据的序列序列化方式就能解决。...我们MySQL的时区改为太平洋时间。...修改MySQL时区后查询时间范围正确 这是因为在create_time字段的类型为datetimedatetime是没有时区概念的,存储的是格式为YYYYMMDDHHMMSS(年月日时分秒)的整数,...如果我们先将时区改回东八区,create_time的类型改为timestamp,再把时区改为西八区。查询的结果是“H,I,J”。

    3.4K30

    【Python深度学习之路】时间序列数据

    1.datetime类型 对于时间序列数据进行处理时,需要使用表示时间的方法。在P樱桃红中提供了datetime数据类型来对日期实践进行处理。指定datetime。...datetime(年,月,日,时,分,秒,毫秒),返回包含所指定数据的datetime对象,在指定参数时,顺序可以是任意的,也可以指定day=日不对年或月进行制定。...minutes = 30) print(x) 3.datetime与timedelta型数据的运算 我们可以在datetime对象与timedelta对象之间进行加法减法等运算,可以timedelta...datetime对象的值 print(x+y) print(x+z) 4.从表示时间的字符串中创建datetime对象 使用datetime可以从指定格式的字符串中生成datetime对象,例如,当字符串...编程实现: import datetime as dt # 先声明一个值为“1999-02-22”的字符串 s = "1999-02-22" # 字符串转化为datetime类型。

    47010

    雪花算法Snowflake

    格式:1bit保留 + 41bit时间戳 + 10bit机器 + 12bit序列号 第一位不使用,主要是为了避免部分场景变成负数; 41位时间戳,也就是2的41次方,毫秒为单位,足够保存69年。...Id,带上节点序列号。...因为雪花Id内带有时间戳信息,因此我们可以根据主键Id来直接搜索指定时间区间的数据。 /// 时间转为Id,不带节点序列号。...GetId(DateTime time); GetId用于计算指定时间的基准Id,只有最高的时间部分,机器码序列化为零。...星尘大量使用雪花Id,用于存储跟踪数据采样数据,以前必须先插入跟踪数据得到自增Id然后才能插入采样数据(需要关联)的问题迎难解,两者都可以同时走批量插入。

    98420

    前端中的时间

    ISO 8601 国际标准化组织的国际标准ISO 8601,是日期时间的表示方法。...3,new Date(dateStr); // Date对象也有一个parse方法,用于解析一个日期字符串,参数是一个包含待解析的日期时间的字符串,返回从1970年1月1日0点到给定日期的毫秒数。...Data.parse(dataStr) // 可接受参数形式类似于Date.UTC()方法的参数,但Date.UTC()方法返回是一个毫秒数,且是UTC时间Date()函数返回是一个对象,且是本地时间...时间戳 如果需要从当前的时间对象获取其相应的时间戳,我们可以使用getTime或者valueOf(),返回距离1970年1月1日0点的毫秒数。 在ES5的标准中,没有提供时区的字符串默认为标准时区。...在数据库中存储的时间,一定要是UTC时间戳。前端从后台拿到时间戳以后,要转化为本地时间对象,再格式化对人类阅读友好的文本。

    2K10

    一起Polyfill系列:让Date识别ISO 8601日期时间格式

    一、什么是ISO 8601日期时间格式   ISO 8601是国际标准化组织制定的日期时间表示规范,全称是《数据存储交换形式·信息交换·日期时间的表示方法》。  ...Date.parse({String} datetime) :接收ISO 8061GMT的日期时间格式字符串(根据格式内容被识别为0时区或其他时区的日期时间),返回入参所表示的0时区日期时间距离1970...Date对象 */ var date5 = new Date('Tue May 25 2014 00:00:00 GMT'); /** * 第六种入参模式:入参依次为年、月、日、时、分、秒毫秒的数值...Date.parse({String} datetime) :接收GMT的日期时间格式字符串(根据GMT格式内容被识别为0时区或其他时区的日期时间),返回入参所表示的0时区日期时间距离1970年1月1日的毫秒数...Date.UTC(Y,M,d,H,m,s,ms) :设置0时区的日期时间,返回入参所表示的0时区日期时间距离1970年1月1日的毫秒数    4. 部分实例成员   4.1.

    1.6K70

    Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化

    在进行投资交易研究时,对于时间序列数据及其操作要有专业的理解。本文重点介绍如何使用PythonPandas帮助客户进行时间序列分析来分析股票数据。...Series.dt.tz_localize(self, *args, **kwargs) 时区非感知的Datetime Array/Index本地化为时区感知的Datetime Array/Index...时间序列趋势、季节性周期性 时间序列数据可以分解为四个组成部分: 趋势 季节性 周期性 噪声 并不是所有的时间序列都具有趋势、季节性或周期性;而且必须有足够的数据支持存在季节性、周期性或趋势。...并不是所有的时间序列必须呈现趋势或模式,它们也可能完全是随机的。 除了高频变动(如季节性噪声)外,时间序列数据通常还会呈现渐变的变异性。通过在不同时间尺度上进行滚动平均可以很容易地可视化这些趋势。...如果时间序列有单位根,则表示存在一些时间相关结构,即时间序列不是平稳的。 统计量越负值,时间序列越有可能是平稳的。一般来说,如果 p 值 > 0.05,则数据有单位根,不是平稳的。

    61800

    软件测试|数据处理神器pandas教程(八)

    时间序列 顾名思义,时间序列(time series),就是由时间构成的序列,它指的是在一定时间内按照时间顺序测量的某个变量的取值序列,比如一天内的温度会随时间发生变化,或者股票的价格会随着时间不断的波动...(14, 0) datetime.time(14, 30) datetime.time(15, 0)] 更改时间频率,上面我们的时间频率是以30分钟为间隔的,我们也可以时间间隔修改为一个小时,代码如下...(7, 10) datetime.time(8, 10) datetime.time(9, 10) datetime.time(10, 10) datetime.time(11, 10)] 转化为时间戳...注: NaT 表示的不是时间 ,它等效于 NaN。...总结 本文主要介绍了pandas时间序列相关内容,pandas对于时间的处理非常丰富,功能也十分强大,对于我们的工作有很大帮助。后续我们介绍pandas时间差的处理。

    1.3K20
    领券