精华内容
下载资源
问答
  • 年月日的了解
    千次阅读
    2020-12-29 23:31:33

    在业务环境中,总是想要筛选出不同时间条件下的数据,例如我只想查询当天数据,当月数据或者本年数据。于是就想通过MySQL自带的几个时间函数进行简单的实现。

    一、SQL语句实现Talk is cheap,show me the code.

    查询当天的数据的两种方式:

    1、SELECT

    *

    FROM

    cars_location

    WHERE

    YEAR ( create_time ) = YEAR ( now( ) )

    AND MONTH ( create_time ) = MONTH ( now( ) )

    AND DAY ( create_time ) = DAY ( now( ) )

    2、SELECT

    *

    FROM

    cars_location

    WHERE

    date( create_time ) = curdate( );

    查询本年:SELECT

    *

    FROM

    `cars_location`

    WHERE

    YEAR ( create_time ) = YEAR ( now( ) )

    查询本月:SELECT

    *

    FROM

    `cars_location`

    WHERE

    YEAR ( create_time ) = YEAR ( now( ) )

    AND MONTH ( create_time ) = MONTH ( now( ) )

    二、结合Mybatis实现

    首先我们来了解,假设我有一个dateFlag属性,专门用来判断前端传过来的查询时间条件,并且规定dateFlag='day’表示查询当天数据,dateFlag='month’表示查询当月数据,dateFlag='year’表示查询当年数据,以下就是mybatis的实现片段可供参考,其中需要注意在if test中的==条件后的参数需要加单引号。

    AND YEAR ( create_time ) = YEAR ( now( ) )

    AND MONTH ( create_time ) = MONTH ( now( ) )

    AND DAY ( create_time ) = DAY ( now( ) )

    AND YEAR ( create_time ) = YEAR ( now( ) )

    AND MONTH ( create_time ) = MONTH ( now( ) )

    AND YEAR ( create_time ) = YEAR ( now( ) )

    三、总结

    通过了解MySQL的时间函数以及集合Mybatis的写法,成功对接后台实现根据dateFlag查询当日、当月或者本年的数据。题外话:我们从后台返回的时间戳总是毫秒数,如果我们要转换成"yyyy-MM-dd HH:mm:ss"的格式,那么可以参考以下的js函数进行转换:function timeFormat(data){

    var datatime='';

    if( data != null|| data!=undefined){

    timestampToTime(data);

    function timestampToTime(timestamp) {

    var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000

    var Y = date.getFullYear() + '-';

    var M = ( date.getMonth() + 1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';

    var D;

    if( date.getDate() < 10 ){

    D = "0"+date.getDate()+" ";

    }else{

    D = date.getDate()+" ";

    }

    var h = ( date.getHours() < 10 ? '0'+(date.getHours()) : date.getHours() ) + ':';

    var m = ( date.getMinutes() < 10 ? '0'+(date.getMinutes() ) : date.getMinutes() ) + ':';

    var s = ( date.getSeconds() < 10 ? '0'+(date.getSeconds() ) : date.getSeconds() );

    datatime = Y+M+D+h+m+s;

    return Y+M+D+h+m+s;

    }

    return datatime;

    }

    }

    更多相关内容
  • 计算年月日的dsdn.md

    2019-09-20 12:37:46
    关于C++代码的题目,对一些课程的了解,在作者记录学习心得和历程的同时,帮助一些0基础的同学入门,
  • 本篇文章主要介绍了iOS 获取公历、农历日期的年月日的实例代码,主要介绍了三种方法,具有一定的参考价值,有兴趣的可以了解一下。
  • 各位关注我的朋友应该知道,我最近一直在写一个系列,那就是pandas练习,了解一点pandas的应该都知道,pandas真的超级好用,不仅可以处理不同格式的数据,还可以画图,有一位朋友给我留言说为什么不用pandas直接...

    ba613dbd0ca83f2a354d3ef9a073224d.png

    终于迎来了周末,能让我有时间把这周立的flag全部解决掉。

    在上一篇pandas练习中,我有提到要把python的时间处理单独写一篇,如果有读者仔细观察的话,可以看到我用的图片就是时间模块datetime里面的一些操作。那么我们今天的要学习的内容就是datetime内建模块和pandas库中处理时间的几个函数,以及resample, re-sample是重新采集的意思,也可以理解为把时间按照一定的约定重置。

    刚好最近做的pandas练习系列里面刚好有一个章节是时间序列的练习的。

    所以学完基础的知识以后加上一个练习,我相信可以对这个部分能有不同的理解。

    好的,让我开始快乐的时间之旅吧。

    首先申明我学习这种库喜欢直接去啃官方的文档,来源在这

    datetime - Basic date and time types - Python 3.7.4rc1 documentation​docs.python.org

    以及

    pandas.to_datetime - pandas 0.24.2 documentation​pandas.pydata.org

    还有

    Resampling - pandas 0.24.2 documentation​pandas.pydata.org

    有兴趣的伙伴也可以自己去这几个网址学习。

    在今天回顾之前写的文章的过程中,我发现自己有一个很大的缺点,那就是缺乏逻辑性,之前的文多有一种随性所为的意思,所以我想从这篇文章开始,引入思维导图,这一方面方便各位读者,另一方面当我自己回头看自己的写过的文的时候,也能更加的方便的常读常新。

    一、python有很多库可以用来处理时间,如:datetime,time,calendar等

    5f3ce63a6f27cbd4e644764409dbbd15.png
    python常用的处理时间的库

    而datetime常用的是datetime.datetime函数。我们今天就从datetime来入手了

    学习任何一个模块的时候都应该先看这个库都有哪些模块

    同样的使用导图

    332014c328164eea15e69b10921ba0c2.png
    datetime库的基本信息

    开始这个库之前,我们要首先看两个参数

    datetime.MINYEAR=1

    datetime.MAXYEAR=9999

    这两个类表示的是datetime从1到9999,这对于我们的处理来说足够了,毕竟看到这篇文章的没有人可以到9999年。LOL

    通过上面的图形,能够清楚的看到,datetime库最常用的是timedelta和datetime这两个类。

    我们首先看一下timedelta

    from datetime import datetime
    now = datetime.now()
    now

    7267b444654b9f59d66a775107bf02eb.png
    输出结果

    求解一个时间差

    delta = datetime(2000,1,7) - datetime(1998,6,23,7,16)
    delta

    620c6600be0e798c162fe9c5608cfba2.png
    输出结果
    delta.days

    996d4290c2ae5b9e596fe599304bc7c8.png
    输出结果
    delta.seconds

    586ad52b4b1366f6e030dd224b166c94.png
    输出结果

    这两个语句就是表示的两个时间的差值,其中delta.days表示的是两个时间之间相差的天数,delta.seconds表示的是相差的秒钟数。也就是我输入的这两个时间相差562天,60240微秒

    我们再来看一下timedelta的一些基本操作

    from datetime import timedelta
    year = timedelta(days=365)
    another_year = timedelta(weeks=40,days=84,hours=23,
                            minutes=50,seconds=600)
    year.total_seconds()

    290f8332a12381555c57a4451e0586b6.png
    输出结果
    year == another_year

    359f37de25d90addadc1e30c91064228.png
    输出结果

    时间的相加

    start 

    fb1b70edcb194ebe20543c6acbb8d532.png
    输出结果

    时间相减

    start 

    59a7bdd366b52922124cfa49ee317528.png
    输出结果

    好的,下面主要来看一下datetime.datetime,我们之所以学习datetime库是因为在实际的工作中,时间格式不是统一的,不同的人会有不同的写法。使用datetime可以按照我们想要的时间格式来实现

    datetime.today()

    6682739f0e6273df37e5c0f75848fe97.png
    输出结果

    获取当前的时间

    datetime.now()

    e0abe2c4dd09aa468cc1ab35e0a58992.png
    输出结果

    获取伦敦的当前时间,因为,我们知道我们是东8区,所以应该相差8个小时

    datetime.utcnow()

    8235b7d3f5a883f958c2bf61c6bfe001.png
    输出结果

    可以看到确实是相差了8个小时。

    下面看一个比较常用的字符串型时间转换为常见的日期格式的操作。

    有两种操作

    1 strftime(format)
    2datetime.strptime(string,format)

    现在分别介绍一些这两个用法

    stamp 

    b337c568d99a0c4a1d548024424352c5.png

    我们在来看一下第二中操作时间的做法

    dt = datetime.strptime('21/11/06 16:30','%d/%m/%y %H:%M')
    dt

    fa9e544110fca1f6530b3d158d0b22b3.png
    输出结果

    能够看到这两个的做法的区别是什么,1第一种做法是直接操作一个字符串的,而第二种的做法是把字符串传递给模块,然后根据格式操作。

    但是以上的两种做法都有一个问题,就是每次使用时都要编写一个格式,这个就很方便了,所以这里介绍一个第三方包dateutil 这个库中有一个类parser 这个类种有一种做法是parser.parse

    我们来看一下

    from dateutil.parser import parse
    parse('2001-01-03')

    cb7d9ada40beef868d26a68598e641a1.png
    输出结果

    再看一个例子,

    parse('20140608')

    03e65a2076cdaa56322aa4f918b2325f.png
    输出结果

    可以看到这个处理时间非常方便,可以直接把类似于时间的格式,直接处理成数据的形式,简单方便。

    基本所有的日期表示dateutil都能够解析,比如下面这个

    parse('Jan 31,1997 10:45 PM')

    f24d6168a8439665b524f132425af97d.png
    输出结果

    在国际上经常能够看到日期出现在月份之前,可以传递dayfirst = True来表明这种情况

    如下所示

    parse('6/12/2011',dayfirst=True)

    54e0d59af5be76947383ca50541d2abd.png
    输出结果

    以上是介绍了datetime以及一个非常好用的库dateutil,但是要注意的是,dateutil是一个好用但是不完美的工具,比如可能将一些字符串识别为不想要的日期

    parse

    cd231b4caf67e68010a74803b148e3ed.png
    输出结果

    可以看到,把42这种无法直接识别的字符串识别成了2042年的当天(上面是一个很好的例子)当然了,其实也可以理解,对于时间来说,最好的当然还是有年月日了,所以这个库还是很还用的。

    各位关注我的朋友应该知道,我最近一直在写一个系列,那就是pandas练习,了解一点pandas的应该都知道,pandas真的超级好用,不仅可以处理不同格式的数据,还可以画图,有一位朋友给我留言说为什么不用pandas直接绘图,其实我知道pandas能够绘制图,但是这通常需要和matplotlib一起用。所以我就没用panda绘图。

    好吧扯得有点远,下面我们来看一下pandas处理时间时的一些应用,这个主要包含todatetime,resample,还有用来处理时间索引的data_range

    下面我将重点说明这三个部分。

    首先我们来看一下pandas.to_datetime,这个模块可以很好的转换很多不同的日期表示格式。

    老规矩,还是先看一下这个模块的参数

    pandas

    我专门做了一个表格来说明这些参数分别代表着什么以及怎么使用

    141a646378cc72c8d51470b3bb04774f.png
    这是我自己按照官方文档翻译的,可能会有一些错误,还请各位看官谨慎参考

    下面我们看一些例子,来加深理解

    df = pd.DataFrame({'year':[2015,2016],
                      'month':[4,3],
                      'day':[4,5]})
    pd.to_datetime(df)

    693b9e8641cd22f9ac6bb10da30a046b.png
    输出结果

    这个例子中转换的数据是DataFrame

    dt = '2016-07-08'
    pd.to_datetime(dt)

    5940d62dd1d02c8d5f7175744de444eb.png
    输出结果

    这个例子使用的是字符串型

    下面我们做一个整型数据的转换

    dt1 = 20190807
    pd.to_datetime(dt1,unit='s')

    e2cbbaf75b329b2c4cfe4adf10c08c46.png
    输出结果

    我们在看一下errors的用法

    #把dt1转换成想要的时间格式
    pd.to_datetime(dt1,format='%Y%m%d',errors='ignore')

    b06ab63b542a2c403732c9ca85649f1d.png
    输出结果

    再来一个

    pd.to_datetime('13000101',format='%Y%m%d',errors='coerce')

    1ec9bd2b09c98e54a4766b159505a94d.png
    输出结果

    NaT=Not a Time是时间里面的空值

    我们再来看一下infer_datetime_format等于True时的执行顺序,

    #首先创建一个数据
    s = pd.Series(['3/11/2000','3/12/2000','3/13/2000']*1000)
    s.head()

    8d7de18ea447592d50d1c51855549a98.png
    输出结果

    在看一下执行用时,这里要使用魔法函数,以及即时函数timeit

    %timeit pd.to_datetime(s,infer_datetime_format=True)

    8248cd4747c480a50b02727265cc98f8.png
    输出结果
    %timeit pd.to_datetime(s,infer_datetime_format=False)

    9155a2149499996bdb6702a0b65b9aaa.png
    输出结果

    能够看到着两个语句执行速度的区别,infer_datetime_format=True的执行速度是infer_datetime_format=False的20多倍

    好的到这里to_datetime这个模块基本到位了,这个可以和to-numeric模块联系起来,很方便,很强大,能够处理的数据类型很多

    由于最后一部分resample的内容特别多,所以我想了想还是分两部分来写吧。

    好的今天就到这里了,我们下期节目再见!

    哈哈哈,期待朋友们的点赞!谢谢!!!

    展开全文
  • By 本杰明·格雷厄姆引言时间序列是金融量化分析中最常见的数据类型,记录某一变量或特征沿着时间轴而取值,比如某只股票2008-2018年收盘价。量化分析的一个重要环节之一是基于历史数据进行分析和挖掘,试图 从...

    5f3dadb56b1d5c50ee6d6fbcfc29849d.png

    由于大多数人骨子里倾向于投机或赌博,受欲望、恐惧和贪婪所左右,因此大多数时间里股票市场都是非理性的,容易有过激的股价波动。 By 本杰明·格雷厄姆

    引言

    时间序列是金融量化分析中最常见的数据类型,记录某一变量或特征沿着时间轴而取值,比如某只股票2008-2018年日收盘价。量化分析的一个重要环节之一是基于历史数据进行分析和挖掘,试图 从历史的维度探究某一事物的变化规律或发展趋势(做预测)。目前,时间序列分析理论已经相对成熟,包括一般统计分析(如平稳性、自相关、谱分析等)、统计建模和推断、时间序列预测(包括流行的机器学习、深度学习,如LSTM模型)和滤波控制等。在使用Python分析时间序列时,经常会碰到时间日期格式处理和转换问题,尤其在可视化分析和分时期统计方面。本文作为时间序列分析的入门指引之一,将着重介绍如何利用Python处理日期和分时期统计分析,希望能起到抛砖引玉的作用。

    先引入数据分析和画图常用库,pandas、numpy、matplotlib以及中文乱码处理,画图也可以使用pyecharts、seaborn、bokeh等,以下代码均使用Jupyter notebook(python3.7)编译。

    import pandas as pd  
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline   
    #正常显示画图时出现的中文和负号
    from pylab import mpl
    mpl.rcParams['font.sans-serif']=['SimHei']
    mpl.rcParams['axes.unicode_minus']=False
    

    1 datetime处理日期

    python常用的处理时间的库有:datetime,time,calendar。datetime库包括了date(储存日期:(年、月、日),time(储存时间:(小时、分、秒和微秒),datetime同时包含了data和time,timedelta代表两个datetime之间的差(天、秒、微秒)。

    from datetime import datetime
    now=datetime.now()
    print(f'当前时间:{now}')
    print(f'{now.year}年{now.month}月{now.day}日')
    
    输出结果:
    当前时间:2019-01-11 10:25:21.445490
    2019年1月11日
    
    now.strftime('%Y-%m-%d')
    
    输出结果:
    '2019-01-10'
    
    delta=datetime(2019,1,10)-datetime(2019,1,1,12,30)
    delta
    
    输出结果:
    datetime.timedelta(days=8, seconds=41400)
    
    from datetime import timedelta
    start=datetime(2018,1,1)
    #计算50天后是哪一天
    start+timedelta(50)
    
    datetime.datetime(2018, 2, 20, 0, 0)
    
    #字符串和时间的转化
    #比如想要知道列表里两个时间字符串之间相差多少天
    datestr=['12/20/2018','12/11/2018']
    new_date=[datetime.strptime(d,'%m/%d/%Y') for d in datestr]
    new_date[0]-new_date[1]
    
    输出结果:
    datetime.timedelta(days=9)
    
    #将datetime格式转换为常见的年(Y)月(m)日(d)格式表示
    [date.strftime('%Y-%m-%d') for date in new_date]
    
    输出结果:
    ['2018-12-20', '2018-12-11']
    

    datetime.strptime只能根据设定的时间格式来处理指定的字符串,如果列表里(list)包含不止一种格式的字符串,如datestr=['12/20/2018','12/11/2018','2018-10-18'],使用datetime.strptime就很难处理了。遇到这种情况可以引入第三方时间处理包dateutil,可以处理任意格式字符串。

    from dateutil.parser import parse
    datestr=['12/20/2018','20180210','2019-01-10']
    #转换成datetime格式
    new_d=[parse(d) for d in datestr]
    #统一为12/20/2018格式
    d1=[d.strftime('%m/%d/%Y') for d in new_d]
    d2=[d.strftime('%Y%m%d') for d in new_d]
    d3=[d.strftime('%Y-%m-%d') for d in new_d]
    d4=[d.strftime('%y-%m-%d') for d in new_d]
    print(f'datetime格式:n{new_d}')
    print(f'"月/日/年"格式:n {d1}')
    print(f'"年月日"格式:n{d2}')
    print(f'"年-月-日格式":n{d3}')
    print(f'"年(后两位)-月-日"格式:n{d4}')
    
    输出结果:
    datetime格式:
    [datetime.datetime(2018, 12, 20, 0, 0),
     datetime.datetime(2018, 2, 10, 0, 0), 
     datetime.datetime(2019, 1, 10, 0, 0)]
    "月/日/年"格式:
     ['12/20/2018', '02/10/2018', '01/10/2019']
    "年月日"格式:
    ['20181220', '20180210', '20190110']
    "年-月-日格式":
    ['2018-12-20', '2018-02-10', '2019-01-10']
    "年(后两位)-月-日"格式:
    ['18-12-20', '18-02-10', '19-01-10']
    

    2 使用NumPy库处理日期

    numpy库主要用于数组操作(线性代数分析),但在处理日期和时间数据上功能也很强大,其时间格式是datetime64

    #将字符串转换成numpy格式时间
    #注意个位前补0,如1月写成01
    nd=np.datetime64('2019-01-10')
    nd
    
    输出结果:
    numpy.datetime64('2019-01-10')
    
    #转化为字符串
    np.datetime_as_string(nd)
    
    输出结果:
    '2019-01-10'
    
    np.datetime64('1901')
    
    输出结果:
    numpy.datetime64('1901')
    
    #转化为datetime格式
    nd.astype(datetime)
    
    输出结果
    datetime.date(2019, 1, 10)
    
    #生成时间序列
    #默认以日为间隔,算头不算尾
    np.arange('2019-01-05','2019-01-10',dtype='datetime64')
    
    输出结果
    array(['2019-01-05', '2019-01-06', '2019-01-07', 
         '2019-01-08',
         '2019-01-09'], dtype='datetime64[D]')
    
    #以月为间隔,生成2018年12个月
    np.arange('2018-01-01','2019-01-01',dtype='datetime64[M]')
    
    输出结果:
    array(['2018-01', '2018-02', '2018-03', '2018-04', 
            '2018-05', '2018-06',
            '2018-07', '2018-08', '2018-09', '2018-10', 
            '2018-11', '2018-12'],
            dtype='datetime64[M]')
    
    #以年为间隔
    np.arange('2015-01-01','2019-01-20',dtype='datetime64[Y]')
    
    输出结果:
    array(['2015', '2016', '2017', '2018'], 
          dtype='datetime64[Y]')
    
    #以周为间隔
    np.arange('2018-12-01','2018-12-20',dtype='datetime64[W]')
    
    输出结果:
    array(['2018-11-29', '2018-12-06', '2018-12-13'], 
           dtype='datetime64[W]')
    
    #设定随机种子(括号里的数字只是起标记作用)
    np.random.seed(1)
    #h:小时,m:分,s:秒,ms微秒
    #生成分时
    x=np.arange('2019-01-10T00:00:00',
    '2019-01-10T23:00:00',dtype='datetime64[m]')
    #生成标准正态分布时间序列
    y=np.random.standard_normal(len(x))
    #设置图片大小
    fig=plt.figure(figsize=(12,6))
    #将x的np.datetime转换为datetime.datetime
    plt.plot(x.astype(datetime),y)
    fig.autofmt_xdate()
    plt.title('模拟23小时内每分钟正态分布的随机数分布')
    # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边
    ax = plt.gca()  
    ax.spines['right'].set_color('none') 
    ax.spines['top'].set_color('none')  
    plt.show()
    

    d5ba2312c111e6c158ae8125f24b5f18.png

    3 Pandas库处理日期

    Pandas库是处理时间序列的利器,pandas有着强大的日期数据处理功能,可以按日期筛选数据、按日期显示数据、按日期统计数据。pandas的实际类型主要分为timestamp(时间戳)、period(时期)和时间间隔(timedelta),常用的日期处理函数有:pd.to_datetime(),pd.to_period(),pd.date_range(),pd.period_range;pandas的resample函数还提供了对日期样本的转换,如高低频数据转化等。

    01 时间格式处理及转换

    定义时间格式和不同格式之间相互转换,常用函数:pd.Timestamp(),pd.Period(),pd.to_timestamp(),pd.to_datetime(),pd.to_period()。

    #定义timestamp
    t1=pd.Timestamp('2019-01-10')
    t2=pd.Timestamp('2018-12-10')
    print(f't1= {t1}')
    print(f't2= {t2}')
    print(f't1与t2时间间隔:{(t1-t2).days}天')
    
    输出结果:
    t1= 2019-01-10 00:00:00
    t2= 2018-12-10 00:00:00
    t1与t2时间间隔:31天
    
    #获取当前时间
    now=pd.datetime.now()
    print(now)
    print(now.strftime('%Y-%m-%d'))
    
    输出结果:
    2019-01-11 11:56:49.014612
    2019-01-11
    
    #时间间隔
    pd.Timedelta(days=5, minutes=50, seconds=20,
       milliseconds=10, microseconds=10, nanoseconds=10)
    
    输出结果:
    Timedelta('5 days 00:50:20.010010')
    
    #计算当前时间往后100天的日期
    dt=now+pd.Timedelta(days=100)
    #只显示年月日
    dt.strftime('%Y-%m-%d')
    
    输出结果:
    '2019-04-21'
    
    #定义时期period,默认是A-DEC,代表年份,以12月作为最后一个月
    p1=pd.Period('2019')
    p2=pd.Period('2018')
    print(f'p1={p1}年')
    print(f'p2={p2}年')
    print(f'p1和p2间隔{p1-p2}年')
    #可以直接+、-整数(代表年)
    print(f'十年前是{p-10}年')
    
    输出结果:
    p1=2019年
    p2=2018年
    p1和p2间隔1年
    十年前是2009年
    
    #通过asfreq转换时期频率
    #以第一个月算,p1前面已赋值为2019年
    p1.asfreq('M','start')
    
    输出结果:
    Period('2019-01', 'M')
    
    #以最后一个月算
    p1.asfreq('M','end')
    
    输出结果:
    Period('2019-12', 'M')
    
    #财报季度
    p=pd.Period('2019Q3',freq='Q-DEC')
    #起始月日
    print(p.asfreq('D','start'))
    #结束月日
    print(p.asfreq('D','end'))
    
    结果输出:
    2019-07-01
    2019-09-30
    
    #时间戳和时期相互转换
    print(p1.to_timestamp(how='end'))
    print(p1.to_timestamp(how='start'))
    
    输出结果:
    2019-12-31 00:00:00
    2019-01-01 00:00:00
    
    #t1前面赋值为'2019-1-10'
    #转换为月时期
    print(t1.to_period('M'))
    #转换为日时期
    print(t1.to_period('D'))
    print(t1.to_period('W'))
    
    输出结果:
    2019-01
    2019-01-10
    2019-01-07/2019-01-13
    

    02 生成日期序列

    常用函数:pd.date_range(),生成的是DatetimeIndex格式的日期序列;pd.period_range(),生成PeriodIndex的时期日期序列。

    #使用date_range生成日期序列
    #如要详细了解该函数,可以使用help(pd.date_range)
    #参数四选三:起始时间,结束时间,freq,periods
    #freq='M'月,'D'天,'W',周,'Y'年
    #生成月时间序列
    dm = pd.date_range('2018/01/01', freq='M', periods=12)
    print(f'生成月时间序列:n{dm}')
    #算头不算尾
    #生成年时间序列,默认是以12月结尾,freq='Y-DEC'
    dy=pd.date_range('2008-01-01','2019-01-10',freq='Y')
    print(f'生成年时间序列:n{dy}')
    #生成日时间序列
    dd=pd.date_range('2018-01-01',freq='D',periods=10)
    print(f'生成日时间序列:n{dd}')
    #生成周时间序列,默认以sunday周日作为一周最后一日
    #如要改成周一作为第一天,freq='W-SAT'
    dw=pd.date_range('2018-01-01',freq='W',periods=10)
    print(f'生成周时间序列:n{dw}')
    
    输出结果:
    生成月时间序列:
    DatetimeIndex(['2018-01-31', '2018-02-28', 
    '2018-03-31', '2018-04-30','2018-05-31', 
    '2018-06-30', '2018-07-31', '2018-08-31',
    '2018-09-30', '2018-10-31', '2018-11-30', 
    '2018-12-31'], dtype='datetime64[ns]', freq='M')
    生成年时间序列:
    DatetimeIndex(['2008-12-31', '2009-12-31', 
    '2010-12-31', '2011-12-31','2012-12-31', 
    '2013-12-31', '2014-12-31', '2015-12-31',
    '2016-12-31', '2017-12-31', '2018-12-31'],
    dtype='datetime64[ns]', freq='A-DEC')
    生成日时间序列:
    DatetimeIndex(['2018-01-01', '2018-01-02', 
    '2018-01-03', '2018-01-04','2018-01-05', 
    '2018-01-06', '2018-01-07', '2018-01-08',
    '2018-01-09', '2018-01-10'],
    dtype='datetime64[ns]', freq='D')
    生成周时间序列:
    DatetimeIndex(['2018-01-07', '2018-01-14', 
    '2018-01-21', '2018-01-28','2018-02-04', 
    '2018-02-11', '2018-02-18', '2018-02-25',
    '2018-03-04', '2018-03-11'],
    dtype='datetime64[ns]', freq='W-SUN')
    
    #使用period_range生成日期序列
    #参数四选三:起始时间,结束时间,freq,periods
    #freq='M'月,'D'天,'W',周,'Y'年
    #生成月时期序列
    dpm = pd.period_range('2019/01/01', freq='M', periods=12)
    print(f'生成月时间序列:n{dpm}')
    #生成年时期序列,默认是以12月结尾,freq='Y-DEC'
    dpy=pd.period_range('2008-01-01','2019-01-10',freq='Y')
    print(f'生成年时间序列:n{dpy}')
    #生成日时期序列
    dpd=pd.period_range('2018-01-01',freq='D',periods=10)
    print(f'生成日时间序列:n{dpd}')
    #生成周时期序列,默认以sunday周日作为一周最后一日
    #如要改成周一作为第一天,freq='W-SAT'
    dpw=pd.period_range('2018-01-01',freq='W-SUN',periods=10)
    print(f'生成周时间序列:n{dpw}')
    
    输出结果:
    生成月时间序列:
    PeriodIndex(['2019-01', '2019-02', '2019-03', 
    '2019-04', '2019-05', '2019-06', 
    '2019-07', '2019-08', '2019-09', 
    '2019-10', '2019-11', '2019-12'],
    dtype='period[M]', freq='M')
    生成年时间序列:
    PeriodIndex(['2008', '2009', '2010', '2011',
     '2012', '2013', '2014', '2015',
     '2016', '2017', '2018', '2019'],
     dtype='period[A-DEC]', freq='A-DEC')
    生成日时间序列:
    PeriodIndex(['2018-01-01', '2018-01-02', 
    '2018-01-03', '2018-01-04','2018-01-05', 
    '2018-01-06', '2018-01-07', '2018-01-08', 
    '2018-01-09', '2018-01-10'],
    dtype='period[D]', freq='D')
    生成周时间序列:
    PeriodIndex(['2018-01-01/2018-01-07', 
    '2018-01-08/2018-01-14','2018-01-15/2018-01-21', 
    '2018-01-22/2018-01-28','2018-01-29/2018-02-04',
    '2018-02-05/2018-02-11','2018-02-12/2018-02-18', 
    '2018-02-19/2018-02-25','2018-02-26/2018-03-04', 
    '2018-03-05/2018-03-11'],
    dtype='period[W-SUN]', freq='W-SUN')
    
    #画以时间为x轴的图,pandas的DataFrame自动将index列作为x轴
    np.random.seed(2)
    #生成日期序列
    x=pd.date_range('2018/01/01','2019/12/31', freq='d')
    #x=pd.period_range('2018/01/01','2019/12/31', freq='d')
    #标准正态分布时间序列
    y=np.random.standard_normal(len(x))
    #将二者转换为pandas的数据格式
    df=pd.DataFrame(y,columns=['标准正态分布'],index=x)
    df.plot(figsize=(12,6))
    plt.title('模拟标准正态分布随机数')
    ax = plt.gca()  
    ax.spines['right'].set_color('none') 
    ax.spines['top'].set_color('none')  
    plt.show()
    

    cb9cc239ae56a0344732a373cd1440f6.png

    03 时间样本频率转换

    时间序列样本转换主要分两种:即高频数据向低频数据转换;低频数据向高频数据转换。用场景:行情交易数据一般是高频,基本面一般是月度、季度、年度等低频数据,量化分析的时候,常常要将基本面数据和行情交易数据结合起来进行统计回归分析,这时候就要用到样本数据频率的转换了。主要函数:df.resample(),df代表pandas的DataFrame格式数据,resample方法的参数参数中,freq表示重采样频率,例如‘M’、‘5min’,Second(15);用于产生聚合值的函数名或数组函数,例如‘mean’、‘ohlc’、np.max等,默认是‘mean’,其他常用的有:‘first’、‘last’、‘median’、‘max’、‘min’,xis=0默认是纵轴,横轴设置axis=1。

    高频数据向低频数据转化

    #导入2019年1月10日上证指数的分时数据
    #数据来源:同花顺
    df=pd.read_excel('Table.xlsx')
    df.head()
    
    #设置时间作为索引
    df=df.set_index(df['时间'])
    
    #画图,pandas数据表自动将索引作为x轴
    df['成交'].plot(figsize=(16,6),label='成交价格')
    plt.title('上证综指2019年1月10日分时图',fontsize=15)
    ax = plt.gca()  
    ax.spines['right'].set_color('none') 
    ax.spines['top'].set_color('none')  
    plt.show()
    

    2f8c53a3d67f6138d2df9d4237622e6a.png
    #由于时间索引列只有时分秒,是object格式,加入年月日再进行样本变换
    d=datetime(2019,1,10)
    dt=pd.to_datetime([datetime.combine(d,t) for t in df['时间'].values])
    
    #构建新的数据框
    ts=pd.DataFrame(df['成交'].values,columns=['成交'],index=dt)
    ts.head()
    
    #5分钟样本,取最后一个数,标志默认左侧,
    #所以第一个区间[9:20-9:25],显示9:20
    ts.resample('5min',closed='right').last().head()
    
    #5分钟采用,取最后一个数,
    ts.resample('5min',closed='right',label='right').last().head()
    
    #将其转换为每小时样本,默认closed='left',label='left'
    #可以使用均值mean(),或取第一个数first(),或最后一个last()
    ts.resample('H').mean()
    

    低频数据向高频数据转换

    #frq='W'代表周
    df=pd.DataFrame(np.random.randn(5,4),
                index=pd.date_range('1/4/2019',periods=5,freq='W'),
                columns=['GZ','BJ','SH','SZ'])
    
    df
    
    #将上述样本转换为日序列,缺失值使用前值补上
    #如使用后值则用bfill()
    df_daily=df.resample('D').ffill()
    df_daily.head()
    
    #根据period来重采样
    df1=pd.DataFrame(np.random.randn(2,4),
                index=pd.period_range('1-2017','12-2018',freq='A'),
                columns=['GZ','BJ','SH','SZ'])
    df1.head()
    
    #Q-DEC: Quarterly, decenber
    df1.resample('Q-DEC').ffill()
    

    04 日期数据分组统计

    #注意pd是pandas的简称,np是numpy的简称,使用之前先import
    date=pd.date_range('1/1/2018', periods=500, freq='D')
    ts=pd.Series(np.random.standard_normal(500),index=date)
    ts.head()
    
    输出结果:
    2018-01-01    0.681604
    2018-01-02    1.006493
    2018-01-03   -0.942035
    2018-01-04   -0.733425
    2018-01-05   -1.035250
    Freq: D, dtype: float64
    
    #按月显示,不统计
    #按年是A,季度是Q
    tsp=ts.to_period('D')
    tsp.head()
    
    输出结果
    2018-01-01    0.681604
    2018-01-02    1.006493
    2018-01-03   -0.942035
    2018-01-04   -0.733425
    2018-01-05   -1.035250
    Freq: D, dtype: float64
    
    #根据不同时期显示索引值
    #按季度频率Q,月度M,年度A
    tsp.index.asfreq('Q')
    
    输出结果:
    PeriodIndex(['2018Q1', '2018Q1', '2018Q1', '2018Q1', 
    '2018Q1', '2018Q1','2018Q1', '2018Q1', '2018Q1', 
    '2018Q1',...'2019Q2', '2019Q2', '2019Q2', '2019Q2', 
    '2019Q2', '2019Q2', '2019Q2', '2019Q2', '2019Q2', 
     '2019Q2'],dtype='period[Q-DEC]', 
     length=500, freq='Q-DEC')
    
    #按工作日统计
    tsp.index.asfreq('B')
    
    输出结果:
    PeriodIndex(['2018-01-01', '2018-01-02', '2018-01-03', 
    '2018-01-04','2018-01-05', '2018-01-08', '2018-01-08', 
    '2018-01-08','2018-01-09', '2018-01-10', ... 
    '2019-05-06', '2019-05-07', '2019-05-08', '2019-05-09', 
    '2019-05-10', '2019-05-13', '2019-05-13', '2019-05-13', 
    '2019-05-14', '2019-05-15'],
    dtype='period[B]', length=500, freq='B')
    
    #按周进行显示,求和汇总
    #月:M,年:A,季度:Q
    #sum()、mean(),first(),last()
    print(ts.resample('W').sum().head())
    
    输出结果:
    2018-01-07   -0.532703
    2018-01-14   -3.905250
    2018-01-21   -0.037820
    2018-01-28   -4.010447
    2018-02-04   -2.165019
    Freq: W-SUN, dtype: float64
    
    print(ts.resample('AS').sum())
    # "AS"是每年第一天为开始日期, "A是每年最后一天
    
    输出结果:
    2018-01-01    0.434155
    2019-01-01    0.171082
    Freq: AS-JAN, dtype: float64
    
    # 按年统计并显示
    print(ts.resample('AS').sum().to_period('A'))
    
    输出结果:
    2018    0.434155
    2019    0.171082
    Freq: A-DEC, dtype: float64
    
    # 按季度统计并显示
    print(ts.resample('Q').sum().to_period('Q'))
    
    输出结果:
    2018Q1   -23.716613
    2018Q2    -3.304391
    2018Q3    15.039522
    2018Q4    12.415637
    2019Q1     1.153160
    2019Q2    -0.982078
    Freq: Q-DEC, dtype: float64
    
    根据groupby进行resampling
    #按月进行汇总求平均值
    ts.groupby(lambda x:x.year).mean()
    
    输出结果:
    2018    0.001189
    2019    0.001267
    dtype: float64
    
    #按周进行汇总求平均值
    ts.groupby(lambda x:x.weekday).mean()
    
    输出结果:
    0   -0.021922
    1   -0.005215
    2   -0.002857
    3   -0.037211
    4   -0.133802
    5    0.011450
    6    0.198504
    dtype: float64

    关于Python金融量化

    专注于分享Python在金融量化领域的应用,包括金融数据分析与挖掘、金融建模与量化交易等。公众号本身具有AI自动回复功能,关注并回复python入门python进阶python高阶,免费领取python金融量化学习资料,回复“指南”可查看详情。

    展开全文
  • 今天就通过实际的代码来为大家展示,如何用java获取当前的年月日。首先通过实例为大家展示。实例一、具体代码如下:publicstaticvoidgetDateTime()throwsParseException{Calendarnow=Calendar.getInstance();System....

    大家都知道,java是一门非常强大的编程语言,涉及到了我们生活与工作当中的方方面面。今天就通过实际的代码来为大家展示,如何用java获取当前的年月日。

    首先通过实例为大家展示。

    实例一、具体代码如下:public static void getDateTime() throws ParseException

    {

    Calendar now = Calendar.getInstance();

    System.out.println("年: " + now.get(Calendar.YEAR));

    System.out.println("月: " + (now.get(Calendar.MONTH) + 1) + "");

    System.out.println("日: " + now.get(Calendar.DAY_OF_MONTH));

    System.out.println("时: " + now.get(Calendar.HOUR_OF_DAY));

    System.out.println("分: " + now.get(Calendar.MINUTE));

    System.out.println("秒: " + now.get(Calendar.SECOND));

    System.out.println("当前时间毫秒数:" + now.getTimeInMillis());

    System.out.println(now.getTime());

    Date d = new Date();

    System.out.println(d);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String dateNowStr = sdf.format(d);

    System.out.println("格式化后的日期:" + dateNowStr);

    String str = "2012-1-13 17:26:33"; //要跟上面sdf定义的格式一样

    Date today = sdf.parse(str);

    System.out.println("字符串转成日期:" + today);

    }

    输出结果:

    2014-12-26

    年: 2014

    月: 12

    日: 26

    时: 15

    分: 6

    秒: 35

    当前时间毫秒数:1419577595014

    Fri Dec 26 15:06:35 CST 2014

    Fri Dec 26 15:06:35 CST 2014

    格式化后的日期:2014-12-26 15:06:35

    字符串转成日期:Fri Jan 13 17:26:33 CST 2012

    实例二、具体代码如下:package com.ob;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.Date;

    public class DateTest

    {

    public static void main(String[] args) throws ParseException

    {

    Calendar now = Calendar.getInstance();

    System.out.println("年: " + now.get(Calendar.YEAR));

    System.out.println("月: " + (now.get(Calendar.MONTH) + 1) + "");

    System.out.println("日: " + now.get(Calendar.DAY_OF_MONTH));

    System.out.println("时: " + now.get(Calendar.HOUR_OF_DAY));

    System.out.println("分: " + now.get(Calendar.MINUTE));

    System.out.println("秒: " + now.get(Calendar.SECOND));

    System.out.println("当前时间毫秒数:" + now.getTimeInMillis());

    System.out.println(now.getTime());

    Date d = new Date();

    System.out.println(d);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String dateNowStr = sdf.format(d);

    System.out.println("格式化后的日期:" + dateNowStr);

    String str = "2012-1-13 17:26:33"; //要跟上面sdf定义的格式一样

    Date today = sdf.parse(str);

    System.out.println("字符串转成日期:" + today);

    }

    }

    输出结果:

    年: 2012

    月: 1

    日: 13

    时: 17

    分: 28

    秒: 19

    当前时间毫秒数:1326446899902

    Fri Jan 13 17:28:19 CST 2012

    Fri Jan 13 17:28:19 CST 2012

    格式化后的日期:2012-01-13 17:28:19

    字符串转成日期:Fri Jan 13 17:26:33 CST 2012

    实例三 joda-time、具体代码如下:package com.ob;

    import java.text.ParseException;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.Date;

    public class DateTest

    {

    public static void main(String[] args) throws ParseException

    {

    Calendar now = Calendar.getInstance();

    System.out.println("年: " + now.get(Calendar.YEAR));

    System.out.println("月: " + (now.get(Calendar.MONTH) + 1) + "");

    System.out.println("日: " + now.get(Calendar.DAY_OF_MONTH));

    System.out.println("时: " + now.get(Calendar.HOUR_OF_DAY));

    System.out.println("分: " + now.get(Calendar.MINUTE));

    System.out.println("秒: " + now.get(Calendar.SECOND));

    System.out.println("当前时间毫秒数:" + now.getTimeInMillis());

    System.out.println(now.getTime());

    Date d = new Date();

    System.out.println(d);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String dateNowStr = sdf.format(d);

    System.out.println("格式化后的日期:" + dateNowStr);

    String str = "2012-1-13 17:26:33"; //要跟上面sdf定义的格式一样

    Date today = sdf.parse(str);

    System.out.println("字符串转成日期:" + today);

    }

    }

    运行结果如下:yearOfCentury: 15

    monthOfYear: 9

    dayOfMonth: 17

    上述内容就是通过实际的代码为大家展示如何用java获取现在的年月日的具体操作了。想要了解更多java程序代码例子,敬请关注奇Q工具网。

    推荐阅读:

    展开全文
  • =0 and y%4==0): sum+=29 else: sum+=28 elif(i in special): sum+=31 else: sum+=30 sum+=d print("这一天是一年中的第%d天"%sum) 返回结果 输入年月日(yyyy-mm-dd):2020-4-20 这一天是一年中的第111天 使用 list ...
  • ​php日期转时间戳php时间戳与年月日格式日期互相转换php时间戳,在开发的时候还是用得比较多,在MYSQL数据库中他是以字符串的形式存储的,而在本文中将介绍如何把php时间戳转成普通日期,或将普通日期转换成时间戳...
  • 天干地支计算年月日

    千次阅读 2021-02-25 00:58:50
    因过年前家里进伙(乔迁),让当地的先生选了时辰,通过对天干地支的了解,对古人的智慧尤为惊叹,因此,学习了一下。特此,记录所学内容。 天干地支,简称为干支,源自中国远古时代对天象的观测 天干:“甲(jiǎ)...
  • 年、月、、时紫白飞星法年飞星起例诀:歌诀:年上吉星论甲子,逐年星逆中宫取,上中下作三元汇,一上四中七下使。又诀上元甲子一白起,中元四绿推甲子.下元七赤兑位寻, 逐年星逆中宫是。(逆数顺飞)上元:(65-柱数)...
  • 本篇文章主要讲解,如何从日期格式字符串中提取年月日时分秒。 一、日期格式字符串 文章示例的日期格式为“YYYY-MM-DD HH:MM:SS”。上篇文章介绍系统时间格式化输出时就使用的这种格式。使用C/C++开发时,
  • 本期我们要来了解一下金木水火土五行查询表,主要体现在生辰八字中,一个人如何从我们的出生年月日查出我们的五行缺失呢?这必须要对照出生年月日五行查询表来进行。出生年月日五行查询表出生日期八字查询表1、十天...
  • VB6.0基础 获取当前的年月日

    千次阅读 2019-09-17 17:09:52
         IDE : Visual Basic 6.0精简版 ...喜欢Windows系统的同学,可以了解一下 .NET 和 .NET Core。 该博文仅可用于测试与参考。 转载于:https://my.oschina.net/zhichengjiu/blog/3073967
  • 所以,本文将详细介绍MySQL优化技巧以及其相应的技术原理,希望大家看完以后,能更清楚直接的了解这些优化方案,并应用到我们的工作岗位中。 所以,我认为在你选择之前不妨好好想想什么是Java?你适
  • 1.我们来了解一下MID函数, 它的函数是MID(字符串,位置,个数) 我们可以用它来做些操作, 我这里有两个案例: 1.实现快速查找班级 请看图: 具体操作: 输入:=MID(A4,4,1)&“班” 可以看到选中的是第A列第...
  • printf("\n请输入年、月、,格式为:年,月,(2015,12,10)\n");scanf("%d%d%d",&year,&month,&day);//格式为:20190510switch(month)//先计算某月以前月份的总天数{case1:sum=0;break;cas...
  • 在前篇《Oracle日期类型操作几个问题》中,我们已经了解到date类型的基本知识。date类型是一种包括年、月、、时、分和秒的数据类型,可以表示相对精确的时间信息。内部存储上,date类型是类似于数字类型的,可以...
  • 通过日期字段提取年月日、timestamp提取时分秒并进行小时汇总1 业务需求2 根据时间字段提取年月日3 根据timestamp提取时分秒并进行小时汇总 1 业务需求 在进行数据分析,经常会遇到时间处理的问题,有时候需要从时间...
  • 概括的解释下线程的几种状态 Java集合类里面基本的接口有哪些 Iterator和ListIterator的区别 Enumeration和Iterator的区别 介绍一下HTTP的响应结构 final、finalize和finally各自的作用 说一下你了解的几种进程间的...
  • 作业内容《认识年月日》大小月记忆法知识点教学设计教学内容:设计思想:整个教学设计意在发挥学生自主能动性,挖掘学生自主探究,思考观察的能力。给与学生充分的时间、空间进行自主探究;通过学生汇报、展示、交流...
  • 首先第一步,小伙伴们需要了解本例的重点是利用函数功能快速完成领导布置的将整数天数装换成具体年月日数,下面我们就开始具体的操作步骤。第二步、我们单击B5单元格,输入下列函数公式:=INT(A5/365)&a...
  • 今天我们一起来了解下出生年月日五行查询表和免费五行缺失查询表的相关内容,希望能够增加大家对这方面的认识,在以后孩子取名字的时候也不会犯愁了。出生年月日五行查询表周易命理学里对每个人的出生时间都对应于五...
  • Console,WinForm,WPF,ASP.NET,Azure WebJob,WCF,Unity3d,UWP可以适当地了解。 注:此文是自学笔记所生,质量中下等,故要三思而后行。新手到此,不可照搬,应先研究其理象数,待能变通之时,自然跳出深坑。 ...
  • 1、完成一个win32计算器,具体实现的功能为:输入出生年月日,可以输出对应的周岁,星座,距离下一个生日的天数; 2、提交内容为:设计思路的文档、项目代码和可执行程序release版本; 实验思路 1、首先了解...
  • 这里使用例子说明两个对象年月日之间的定义差异。 这两个对象的效率不算高,但是用在android和java基本够用了。 Calendar与Date之间年月日的对应关系: Calendar calendar = Calendar.getInstance(); ...
  • JS Date()相关方法获取年月日时分秒

    万次阅读 2017-06-06 14:02:04
    项目中需要获取当前年月日时分秒,由于对Date()方法了解不深打算用new Date(yyyy,mth,dd,hh,mm,ss);这种方式来做。结果发现这种方式只能用于获取指定日期。要想灵活获取年月日时分秒无捷径可言,只能根据需求灵活...
  • 了解两个 API String.substr(start,length) -- start,开始截取下标 length,截取的长度 String.replace(/(.{4})(.{2})/,"$1-$2-"); --正则,$1-,$2- 分别是引用,前面正则匹配到的字符...1.身份证号获取 出生年月日 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,551
精华内容 7,820
热门标签
关键字:

年月日的了解