首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将十六进制的'YMD‘日期转换为可读的日期?

如何将十六进制的'YMD‘日期转换为可读的日期?
EN

Stack Overflow用户
提问于 2010-11-09 09:07:58
回答 3查看 2.7K关注 0票数 8

我收到了一份里面有一堆日期的文件。它们是十六进制格式的,我被告知是YMD。

示例: 4A273F

..any你知道我该怎么转换它吗?使用SQL/PLSQL实现想法,但我对其他想法持开放态度。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2010-11-12 23:14:48

甲骨文和java彼此配合得很好,如果你觉得奇怪,这可能是一个新的想法。Java很容易做到这一点,但我离开了oracle机器,无法进行测试。这真的很痛,我现在不在甲骨文机器前。为了确保我记得正确,我使用了here http://www.dba-oracle.com/tips_oracle_sqlj_loadjava.htm中的步骤

然后我用谷歌搜索了一下,这几乎就是我们下面要做的:http://docstore.mik.ua/orelly/oracle/guide8i/ch09_03.htm

代码语言:javascript
复制
/****
*java and oracle playing together.
 */
import java.util.Date;
public class hex2Date{
   //this is if you want to call the java function from a command line outside of oracle
     public static void main (String args[]) {
         System.out.println ( convert (args[0]) );    
    }

     public static Date convert(String inHexString){
       try{
        Date dateResult = new Date(Long.parseLong(inHexString,16));
       }catch (NumberFormatException e){
       // do something with the exception if you want, recommend at least throwing it.
    //throw(e,'some extra message');

       }

        return dateResult;
   }
}

将该文件保存为'yourJava‘目录中的Hex2Date.java,并在该目录中的cmd行中键入:

javac Hex2Date.java

现在键入:

java Hex2Date.java 0x4A273F

如果你得到了正确的日期和结果,让我们告诉oracle关于我们的小函数。您首先需要一些用户权限:在此处为您的用户授予-resolve;键入以下内容: loadjava -user scott/tiger type Hex2Date.class

现在将它包装在pl/sql中,这样就可以在pl/sql中调用它:

代码语言:javascript
复制
/* java function plsql wrapper: hex2Date.sf */ 
CREATE OR REPLACE FUNCTION hex2Date (    inHexString IN VARCHAR2)     RETURN DATE AS LANGUAGE JAVA    NAME 'Hex2Date.convert(java.lang.String)              return Date'; /

现在,从SQL>提示符运行它: sql exec DBMS_OUTPUT.PUT_LINE ( hex2Date('0x4A273F'))

票数 1
EN

Stack Overflow用户

发布于 2010-11-09 11:22:20

我猜它们是unix的日期?我还猜测通过 SQL /PLSQL,您可以访问SQL Server和Oracle?如果我的猜测都是对的,我会使用SQL Server的convert函数:

选择转换(int,0x4A273F)

以及它的日期添加功能(从1970年1月1日开始并添加秒):

选择日期添加(ss,{your_result},'19700101')

当然,如果它们都在csv文件中,那么脚本也可以。你还有什么消息吗?

票数 0
EN

Stack Overflow用户

发布于 2010-11-27 06:56:30

如果“十六进制”值来自大型机,那么它们可能是EBCDIC (扩展的二进制编码的十进制交换码)而不是十六进制?我现在没有时间去推理,但是试着在这个页面上寻找想法/线索?http://www.simotime.com/asc2ebc1.htm当然,我可能找错了人:)

假设50 34 2E为2009年4月27日

代码语言:javascript
复制
EBCDIC HEX DEC
5      F5  245
0      F0  240
3      F3  243
4      F4  244
2      F2  242
E      C5  197
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4129595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档