HIVE中如何把‘yyyy-mm-dd’转成‘yyyymmdd’

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE中如何把‘yyyy-mm-dd’转成‘yyyymmdd’相关的知识,希望对你有一定的参考价值。

参考技术A 方法一:

date_format:将日期进行格式化。注意月份是大写MM,小写mm代表成分钟了。

方法二:split+concat 不知是啥

方法三:from_unixtime

方法四:translate函数

用法:translate(input, from, to),input即是要被替换的整个 字符 ,from这里也是你想要替换的字符,注意这里的字符不是字符串,to 即想用哪些字符替换或者删除

方法五:regexp_replace函数

Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?

【中文标题】Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?【英文标题】:Excel Date value retrieved as DD/MM/YY,how to format it to YYYY-MM-DD? 【发布时间】:2016-03-01 05:01:15 【问题描述】:

在转换从 excel 表中检索到的日期时,YEAR 被插入为 20XX 而不是 19xx。

点击excel表格中的单元格,我们可以知道年份并且正确显示,但是在插入时,19xx被插入为20xx。

当我回显从 Excel 表中检索到的日期时-

    echo date('Y-m-d', strtotime($data[3]));
    exit();  //output 1970-01-01

   echo $data[3];
    exit();  //output 22/11/66

我尝试了以下方法-

1. $dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));

输出 - 有些年份正确,但有些 19xx 显示为 20xx

示例-2066-11-22 而不是 1966-11-22

2. $dob = implode('-', array_reverse(explode('/', $data[3])));

输出-YY-MM-DD

3. $dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));

输出 - 1970-01-01

在模型中从excel中检索数据-

function upload()
   ini_set('auto_detect_line_endings',TRUE);
 /* if (is_uploaded_file($_FILES['userfile']['tmp_name'])) 

  readfile($_FILES['userfile']['tmp_name']);
    */
    if (($handle = fopen($_FILES['userfile']['tmp_name'], "r")) !== FALSE) 
    $firstRow = true;
        while (($data = fgetcsv($handle, 4096, ",",'"')) !== FALSE)
        
         $num = count($data);
                if($data[0]!="")
                    //echo implode('-', array_reverse(explode('/', $data[3])));exit();
                    if($data[3]!="")
                    
                        //$dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));
                        //$dob=date("Y-m-d", strtotime($data[3]));
                        //$dob = implode('-', array_reverse(explode('/', $data[3])));
                        //$dob=date("Y-m-d", strtotime($date));
                        $dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));
                    
                     $data1 = array(
                    'member_name' => $data[1],
                     'member_phone' => $data[2],
                     'member_dob' => $dob,
                     'member_outlet' => $data[4]
                   );
                  //echo "<pre/>";print_r($data) ;exit(); 
                       $this->db->insert('member_info', $data1);
                       $member_id = $this->db->insert_id();
                

        

//echo "<pre/>";print_r($data) ;exit();
     fclose($handle); 
    
ini_set('auto_detect_line_endings',FALSE);             
           


有什么建议吗?

【问题讨论】:

【参考方案1】:

我认为以下代码很糟糕 - 我宁愿尝试更改 Excel 电子表格的日期格式 - 但它适用于您提供的示例日期:

$data[3] = '22/11/66'; 
$arr = explode('/', $data[3]);
$dob = date("Y-m-d", strtotime('19' . $arr[2] . '/' . $arr[1] . '/' . $arr[0]));
echo var_dump($dob);

PHP 处理 1970 年之前两位数年份的方式似乎存在问题。使用来自 PHP documentation 的 dd.mm.yy 格式的示例日期...

$dob = date("Y-m-d", strtotime("30.6.08"));
echo var_dump($dob); // 2008-06-30

$dob = date("Y-m-d", strtotime("30.6.66"));
echo var_dump($dob); // 1970-01-01

$dob = date("Y-m-d", strtotime("30.6.1966"));
echo var_dump($dob); // 1966-06-30

我需要将“19”添加到两位数的年份以获取 strtotime 以了解年份。

【讨论】:

但问题是有些年份是 19xx,有些是 20xx,那怎么办? 您的意思是通过更改日期格式来创建新的 Excel 工作表吗? 如果您的 Excel 工作表具有 DD/MM/YY 格式的日期,例如 31/01/12,我看不出您将如何编写一个函数来区分 31/01/2012 和 31 /01/1912。您可以假设像 00 到 20 这样的两位数年份总是意味着 2000 到 2020 年,而像 21 到 69 这样的年份总是 1921-1969 或类似的年份,但这似乎是一个杂牌。如果可能,我会更改 Excel 工作表日期格式。【参考方案2】:

我遇到了和上面一样的问题,

但是 我没有在 php 端进行处理,而是 将 excel 文件的列数据类型更改为 text 替换 date

现在我在 php 方面所做的一切都是我们经常做的:

<?php
  $date = date("Y-m-d", strtotime($excel_date));
 //here you can insert it in your db table if you want.
?>

但是如果你无法控制将要上传的excel文件,那么请使用上面的php处理解决方案。

【讨论】:

以上是关于HIVE中如何把‘yyyy-mm-dd’转成‘yyyymmdd’的主要内容,如果未能解决你的问题,请参考以下文章

Excel 日期值检索为 DD/MM/YY,如何将其格式化为 YYYY-MM-DD?

C# 中怎样将日期格式mm/dd/yy 转化为yyyy-mm-dd?

java如何yyyy-mm-dd格式转换成dd-mon-yy格式

如何在 Presto/Hive 中将日期格式 YYYY-MM-DD 转换为整数 YYYYMMDD?

Hive 到底怎么把sql转成MapReduce的?

JS中如何将yyyy-MM-dd HH:mm:ss格式的字符串转成Date类型