精华内容
下载资源
问答
  • MySQL 和 Hive 中两种日期格式的转换

    千次阅读 2020-02-25 12:13:08
    在解析数据的时会遇到下面的两种日期格式: yyyy-MM-dd yyyyMMdd 这两种格式的转换通常有两种思路: 使用时间处理函数; 使用字符串处理函数。 假设现在的日期为2020年2月2日,需要实现20200202与2020-02-02两种...

    在解析数据的时可能会遇到下面的两种日期格式:

    • yyyy-MM-dd
    • yyyyMMdd

    这两种格式的转换通常有两种思路:

    1. 使用时间处理函数;
    2. 使用字符串处理函数。

    假设现在的日期为2020年2月2日,需要实现202002022020-02-02两种形式的相互转换。下面将介绍在 MySQLHive SQL 中分别是如何实现的。

    MySQL

    1.使用时间处理函数

    unix_timestamp():

    • 根据日期或时间获取 unix 时间戳;
    • 返回距离 1970-01-01 08:00:00的秒数(与百度百科定义的不同,但不影响),注意:
      • MySQL默认 1970-01-01 00:00:00 ~ 1970-01-01 08:00:00,unix时间为都0,是从8点开始计算的;
    • MySQL 的 unix_timestamp 函数只有一个参数,支持传入日期或时间,如果传入的是日期,默认时分秒为00:00:00。

    from_unixtime():

    • 时间格式转换函数,将 unix 时间戳转为指定时间格式;
      在 MySQL 中默认第二个参数是 ‘%Y-%m-%d %h:%i:%s’
    -- 20200202 to 2020-02-02
    -- 第一步:使用时间戳函数 unix_timestamp 获取 unix 时间戳
    select unix_timestamp('20200202')    -- 返回 1580572800
    
    -- 第二步:在第一步的基础上,使用时间格式转换函数 from_unixtime,
    select from_unixtime(unix_timestamp('20200202'), '%Y-%m-%d')
    -- 返回 2020-02-02 
    
    -- 2020-02-02 to 2020
    select from_unixtime(unix_timestamp('2020-02-02'), '%Y%m%d')
    -- 返回 20200202
    

    2.使用字符串处理函数

    substr(string, start_num, len_num):

    • 字符串截取函数;
    • 返回字符串(string)中第几个元素起(start_num),长度为几(len_num)的元素;
    • 如果 start_num 在字符串长度范围内,len_num 超出了字符串长度范围,返回自 start_num 开始至该字符串最后一个元素的字符串;
    • 如果 start_num 在字符串之外,或者len_num 为0,会返回空字符串;
    • 注:MySQL的字符串是从1开始算的。

    concat(string1, string2, …):

    • 字符串拼接函数;
    • 支持多个参数,每个参数都是字符串,将这些字符串拼成1个字符串。
    -- 20200202 to 2020-02-02
    select concat(substr('20200202', 1, 4), '-', substr('20200202', 5, 2), '-', substr('20200202', 7, 2))
    
    -- 2020-02-02 to 20200202
    select concat(substr('2020-02-02', 1, 4), substr('2020-02-02', 6, 2), substr('2020-02-02', 9, 2))
    

    Hive SQL

    1.使用时间处理函数

    unix_timestamp():

    • 根据日期或时间获取 unix 时间戳;
    • 若是中国时区,即返回距离1970-01-01 08:00:00 的秒数(之前的时间unix时间戳是负值);
    • 区别于MySQL,Hive 的 unix_timestamp 函数有 2 个参数:
      • 第一个为需要转化的时间或日期(可以是字符串形式),第二个为第一个参数中传入的时间或日期的格式,用于识别,默认为 ‘yyyy-MM-dd HH:mm:ss’;
      • 所以,不传入第二个参数时,传入第一个参数的日期只能按标准的‘yyyy-MM-dd HH:mm:ss’形式,不然会返回 NULL

    from_unixtime():

    • 时间格式转换函数,将 unix 时间戳转为指定时间格式;
      在 Hive 中默认第二个参数是 ‘yyyy-MM-dd HH:mm:ss’
    -- 20200202 to 2020-02-02
    -- 第一步:使用时间戳函数 unix_timestamp 获取 unix 时间戳
    select unix_timestamp('20200202')     -- 返回 1580572800
    
    -- 第二步:在第一步的基础上,使用时间格式转换函数 from_unixtime,
    select cast(from_unixtime(unix_timestamp('20200202', 'yyyyMMdd'), 'yyyy-MM-dd') as string)
    -- 返回 2020-02-02 
    -- 因为hive存储时间的时候通常用string,所以加了个cast强转为字符串。
    
    -- 2020-02-02 to 2020
    select from_unixtime(unix_timestamp('2020-02-02', 'yyyy-MM-dd'), 'yyyyMMdd')
    -- 返回 20200202
    

    2.使用字符串处理函数

    Hive SQL 中字符串处理函数 substr 与 concat 与 MySQL 基本一致
    MySQL部分 即可。

    展开全文
  • 有时候我们做接口时候,返回json的数据,controller层的方法用@ResponseBody注解,方法返回的是一个bean,bean里面可能有个从数据库获取的数据map,如果有日期格式的字段,可能返回的是时间戳的日期。 解决方法...

    有时候我们做接口时候,返回json的数据,controller层的方法用@ResponseBody注解,方法返回的是一个bean,bean里面可能有个从数据库获取的数据map,如果有日期格式的字段,可能返回的是时间戳的日期。



    解决方法有两种

    1.增加map xml的数据类型处理.实现TypeHandler接口,重写getResult方法。(每个字段都写很繁琐)

    <resultMap type="map" id="mbrMap">
    	<result column="AUTH_TIME" property="CREATE_TIM" typeHandler="com.neil.common.handler.TimeValueHandler"/>		
    </resultMap>

    <select id="queryMem" parameterType="map" resultMap="mbrMap">
    	select * from table		
    </select>

    package com.neil.common.handler;
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.TypeHandler;
    
    public class TimeValueHandler implements TypeHandler<String>{
    
    	private SimpleDateFormat  sd = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
    	
    	@Override
    	public String getResult(ResultSet rs, String str) throws SQLException {
    		return sd.format(rs.getTimestamp(str));
    	}
    
    	@Override
    	public String getResult(ResultSet arg0, int arg1) throws SQLException {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public String getResult(CallableStatement arg0, int arg1) throws SQLException {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	@Override
    	public void setParameter(PreparedStatement arg0, int arg1, String arg2, JdbcType arg3) throws SQLException {
    		// TODO Auto-generated method stub
    		
    	}
    
    
    
    	
    	
    	
    	
    }


    2.Spring MVC的自动转换功能 HttpMessageConverter。指定返回json的日期格式。(推荐,统一处理)

    <!-- 启用spring mvc 注解-->
    <mvc:annotation-driven>
    	<!-- 处理responseBody 里面日期类型 -->
    	<mvc:message-converters>
    		<bean
    			class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
    			<property name="objectMapper">
    				<bean class="com.fasterxml.jackson.databind.ObjectMapper">
    					<property name="dateFormat">
    						<bean class="java.text.SimpleDateFormat">
    							<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
    						</bean>
    					</property>
    				</bean>
    			</property>
    		</bean>
    	</mvc:message-converters>
    </mvc:annotation-driven>  
    

    效果

    {
        "resultCode": "00000",
        "resultMsg": "SUCCESS",
        "bodyMap": {
            "result": {
                "AUTH_TIME": "2016-05-10 17:58:55",
                "ID": 23006
            }
        }
    }



    展开全文
  • 【python】python日期格式统一

    千次阅读 2019-01-08 19:05:09
    项目实际需要,进行如下编码  # -*- coding: utf-8 -*- """ Created on Tue Jan 8 18:02:03 2019 @author: liuty @e-mail: liuty66@163.com @introduction: ...str2='2019-1-8 00:...

    项目实际需要,进行如下编码 

    # -*- coding: utf-8 -*-
    """
    Created on Tue Jan  8 18:02:03 2019
    
    @author: liuty
    @e-mail: liuty66@163.com
    @introduction:
                解析时间模块
    """
    
    
    str1='  2019-01-08'
    str2='2019-1-8 00:00:00'
    str3='2019年1月8日'
    str4='2019年01月08日'
    str5='2019/1/8'
    str6='2019/01/08 00:00'
    str7='2019-1-8'
    
    def str2date(str_date):
        str_date=str_date.strip()
        year=1900
        month=1
        day=1
        if(len(str_date)>11):
            str_date=str_date[:11]
        if(str_date.find('-')>0):
            year=str_date[:4]
            if(year.isdigit()):
                year=int(year)
            else:
                year=0
            month=str_date[5:str_date.rfind('-')]
            if(month.isdigit()):
                month=int(month)
            else:
                month=0
            if(str_date.find(' ')==-1):
                day=str_date[str_date.rfind('-')+1:]
            else:
                day=str_date[str_date.rfind('-')+1:str_date.find(' ')]
            if(day.isdigit()):
                day=int(day)
            else:
                day=0
        elif(str_date.find('年')>0):
            year=str_date[:4]
            if(year.isdigit()):
                year=int(year)
            else:
                year=0
            month=str_date[5:str_date.rfind('月')]
            if(month.isdigit()):
                month=int(month)
            else:
                month=0
            day=str_date[str_date.rfind('月')+1:str_date.rfind('日')]
            if(day.isdigit()):
                day=int(day)
            else:
                day=0
        elif(str_date.find('/')>0):
            year=str_date[:4]
            if(year.isdigit()):
                year=int(year)
            else:
                year=0
            month=str_date[5:str_date.rfind('/')]
            if(month.isdigit()):
                month=int(month)
            else:
                month=0
            if(str_date.find(' ')==-1):
                day=str_date[str_date.rfind('/')+1:]
            else:
                day=str_date[str_date.rfind('/')+1:str_date.find(' ')]
            if(day.isdigit()):
                day=int(day)
            else:
                day=0
        else:
            year=1900
            month=1
            day=1
        if month<10:
            month='0'+str(month)
        if day<10:
            day='0'+str(day)
        return '%s-%s-%s' % (year,month,day)
    
    print(str2date('2017-12-22  a'))
    

     

    展开全文
  • 【数据库】HIVE SQL中两种日期的转换

    千次阅读 2019-04-07 23:02:09
    工作中,经常遇到各种格式日期形式...Exp1:'2018/11/5'和'2018-11-05'两种类型的进行日期关联? 这时,就用到大家常用的函数:unix_timestamp 在日常使用时,可能都用来取时间戳了,比如: select unix_time...

          工作中,经常遇到各种格式的日期形式,而且又需要进行关联操作,这个时候怎么办呢?之前每次都是用到的时候各种查资料。这次就总结一下,相关函数,后期不定时持续更新~

    Exp1:'2018/11/5'和'2018-11-05'两种类型的进行日期关联?

    这时,就用到大家常用的函数:unix_timestamp

    在日常使用时,可能都用来取时间戳了,比如:

    select unix_timestamp() as time

    结果为:

    time
    1554205013

     

    这样,我们就看不出目前的时间是多少,来 格式化一下输出方式:

    select from_unixtime(unix_timestamp(),'yyyy-MM-dd') as time

    结果为:

    time
    2019-04-02

    这个函数,直接使用,就是输出当前时间。

    那我们这个问题就迎刃而解了,把两边的格式统一。

    select from_unixtime(unix_timestamp('2018-11-05','yyyy-MM-dd'),'yyyy/MM/dd') as time

    结果为:

    time
    2018/11/05

    显然这个转换方式不行。

    那么换一下:

    select from_unixtime(unix_timestamp('2018/11/5','yyyy/MM/dd'),'yyyy-MM-dd') as time
    

    结果为:

    time
    2018-11-05

    这样就解决了该问题。

     

    展开全文
  • 格式化自己想要的时间格式,本人用过两种方式去格式化时间,下面请看代码: (仅供参考) 第一种格式化方法: 第一种方法比较简单,主要是导入了一个moment.js插件,里面封装了格式化时间的方...
  • springboot全局日期格式

    千次阅读 2019-06-06 10:44:43
    springboot全局日期格式化有两种方式 springboot全局日期格式化有两种方式 方式一是配置参数 参数配置的方式就是在json序列化的时候,当字段为日期类型的时候的format类型,就相当于在所有日期字段上加了一个注解...
  • 【从菜鸟到高手】日期格式

    千次阅读 2018-10-15 18:30:55
    1 软件中的日期格式日期格式化就是对日期字符串进行解析和格式化输出。 在软件系统中,日期的形式与其被使用的阶段密切相关,展现层的日期数据为字符串,逻辑层的日期数据为 Date 对象,存储层的日期数据为...
  • new Date() 日期格式处理
  • spring boot 时间戳转日期格式

    千次阅读 热门讨论 2019-01-09 14:15:28
    第一种方式:默认的json处理是 jackson 也就是对...两种方法,推荐第一种 方法一: 可以在apllication.property加入下面配置就可以 #时间戳统一转换  spring.jackson.date-format=yyyy-MM-dd HH:mm:ss ...
  • java 日期格式

    千次阅读 2012-05-20 10:54:30
    java 日期格式化 关键字: java日期 1 SimpleDateFormat担当重任,怎样格式化都行 view plaincopy to clipboardprint? import java.util.Date; import java.text.SimpleDateFormat; public ...
  • Oracle 日期格式比较

    千次阅读 2019-06-21 14:42:16
    取2019年6月6日的数据 where to_char(X.date, 'YYY-MM-DD') >= '2019-06-06' and to_char(X.date, 'YYYY-MM-DD') < '2019-06-07'
  • 最近整理Easyui控件的时候,对Easyui的DateBox控件和DateTimeBox控件进行...也无非是DateTimeBox控件后面除了基本的年月日之外带上了小时或者分钟或者秒什么的,更何况,这个控件在进行日期格式化时所采用的方法也是
  • 一、SpringMVC使用@ResponseBody时返回json的日期格式    前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson ...
  • 问题源于项目中对于日期日期时间有不同的显示需求,比如生日:1988-08-08,而创建时间:2018-05-01 13:23:30,原来采用注解来解决。@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8&...
  • 在利用datagrid展示后台数据库数据的过程中,会发现,日期数据无法正常显示,而是显示一连串的数字。...参考网上给的网站,这里给出两种方案。 1.在后台将日期数据组装成字符串数据,这样传入前台没有任何
  • 众所周知,在excel中有很多的时间和日期格式。而poi官方在处理时间和日期上面的能力比较弱。网上很多地方都找不到解决的方法,或者说解决的覆盖面太小,解决的格式很少很少。 所以我建议:日期或者时间格式,一定要...
  • Java日期格式 Date 和 Calendar

    千次阅读 2013-07-25 08:41:18
    日期和时间的处理不仅在面试题中会考到,在实际项目开发中也是我们经常需要处理的问题,似乎没有哪个项目可以避开它们,我们常常在处理用户的出生年月日、注册日期,订单的创建时间等属性时用到,由此可见其重要性。...
  • 一、SpringMVC使用@ResponseBody时返回json的日期格式 前提了解: `@ResponseBody` 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个...
  • JAVA中的六种日期类型使用

    千次阅读 2019-03-28 17:01:10
    基本的6种日期类 /** * 六种时间类型的类 * 数据库格式的时间三种格式 */ java.util.Date date = new java.util.Date();//年与日时分秒 //数据库的三种类都继承了java.util.Date,在除了数据库的情况下使用 ...
  • springMVC数据格式转换的三实现

    千次阅读 2017-07-19 14:11:46
    以下介绍三数据类型转换的方法。 一,使用ConversionService转换数据 二,使用自定义编辑器转换数据 三,注册全局自定义编辑器转换数据 1, 使用ConversionService转换数据类型,需要自定义一个转换器,在该转换...
  • Spring Boot默认使用JackJson作为json转换器,用于生成JSON格式数据,有时候它格式化的日期/日期时间(LocalDate/LocalDateTime)字段并不符合产品的需求,因此需要对它返回的json中的日期日期时间类型的字段做...
  • 然而在JSON中,时间(DateTime,Timestamp,Date等)格式一直没有很好地统一,当需要跨平台序列化/反序列化时,遇到不少麻烦。作者经过反复尝试,解决了C#与Java通过JSON进行时间传输的困难。 C#解析Java/...
  •   还有一个就是,当写csdn博客用markdown时,首行缩进个格不好用,这个也折磨了我一阵,之前好使的嘞,让我找到了解决方法: &ensp;&ensp; 加上它就可以喽!!! 当我遇到了BUG   当我做完我功能的...
  • 自定绑定和自动格式化是两种不同的处理,所以需要针对这两个进行配置,以springboot自带的jackson为例 一、接收参数自动绑定 1、配置一个String转Date的转化器 public class StringToDateConverter implements ...
  • 第一方法: 1.启动类继承extends WebMvcConfigurerAdapter 2.覆盖方法configureMessageConverters 第二方法注入bean /** * springboot启动类 使用@SpringBootApplication指定这是一个Spring Boot应用程序 * ...
  • *本例程序使用Jackson2.9.0,jackson1.x的处理方式稍稍有些不同。...因此,在实际应用中有个常见的需求:日期格式化。 假设,User对象有个Date类型的属性birthday: class User implements
  • 数据库中某日期字段有如下数据:select age ,money,birthday from userinfo仔细观察,日期字段有两种格式的内容,一种带时间的,一种不带时间的,在项目中很可能是由于需求变动导致格式调整引起,假如我们只想查询带...
  • Python 计算日期相差的天数

    千次阅读 2019-10-30 17:01:29
    有时候需要算日期相差多少天,如果日期相差大,真的去数肯定很麻烦,还得计算有的是有三十天,有的是三十一天,还有闰年和平年的区别。而这时候如果有一个方法或者函数,只需要输入要计算的日期即可,那...
  • 日期时间规范

    万次阅读 2020-06-20 18:17:57
    【强制】日期格式化时,传入 pattern 中表示年份统一使用小写的 y。 说明:日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后 引入的概念),意思是当天所在的周属于的年份...
  • Java 语言的Calendar,GregorianCalendar (日历),Date(日期)和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。 我们将讨论下面的类: 1、 具体类(和抽象类相对)java.util.Date 2、 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,963
精华内容 25,185
关键字:

两种日期格式如何统一