将“Java.lang.String”转换为“oracle.sql.TIMESTAMPTZ”

2024-01-06

我有以下这些Java.lang.String代表的值String的价值TIMESTAMPTZ。我需要转换这些Java.lang.String TO oracle.sql.TIMESTAMPTZ.

"2016-04-19 17:34:43.781 Asia/Calcutta",
"2016-04-30 20:05:02.002 8:00",
"2003-11-11 00:22:15.0 -7:00",
"2003-01-01 02:00:00.0 -7:00",
"2007-06-08 15:01:12.288 Asia/Bahrain",
"2016-03-08 17:17:35.301 Asia/Calcutta",
"1994-11-24 11:57:17.303"

我尝试了很多方法。

样本1:

尝试过使用SimpleDateFormat

String[] timeZoneValues = new String[]{"2016-04-19 17:34:43.781 Asia/Calcutta", "2016-04-30 20:05:02.002 8:00", "2003-11-11 00:22:15.0 -7:00", "2003-01-01 02:00:00.0 -7:00", "2007-06-08 15:01:12.288 Asia/Bahrain", "2016-03-08 17:17:35.301 Asia/Calcutta", "1994-11-24 11:57:17.303"};
        for(String timeZoneValue: timeZoneValues){
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS XXX");
            try {
                simpleDateFormat.parse(timeZoneValue);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

这引发了异常:

java.text.ParseException: Unparseable date: "2016-04-19 17:34:43.781 Asia/Calcutta"
    at java.text.DateFormat.parse(DateFormat.java:357)

样本2:

通过转换这些来尝试String值直接转化为Timestamp or oracle.sql.TIMESTAMPTZ

String parse = "2016-04-19 17:34:43.781 8:00";
        try {
            Timestamp timestamp = Timestamp.valueOf("2016-04-19 17:34:43.781 8:00");
        }catch (Exception ex){
            ex.printStackTrace();
        }

例外:

java.lang.NumberFormatException: For input string: "781 8:000"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at java.sql.Timestamp.valueOf(Timestamp.java:253)

样本3:

String parse = "2016-04-19 17:34:43.781 Asia/Calcutta";
DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dateTime = dateTimeFormatter.parseDateTime(parse);
Timestamp timeStamp = new Timestamp(dateTime.getMillis());

例外:

Invalid format: "2016-04-19 17:34:43.781 Asia/Calcutta" is malformed at " 17:34:43.781 Asia/Calcutta"

样本4:

try {
TIMESTAMPTZ timestamptz = new TIMESTAMPTZ(connection, (String) colValue);
}catch (Exception ex){
ex.printStackTrace();
}

例外:

java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
    at java.sql.Timestamp.valueOf(Timestamp.java:249)
    at oracle.sql.TIMESTAMPTZ.toBytes(TIMESTAMPTZ.java:1919)
    at oracle.sql.TIMESTAMPTZ.<init>(TIMESTAMPTZ.java:253)

我正在尝试插入TIMESTAMPTZ值转化为Oracle数据库使用Apache Metamodel我有Java 1.7安装在我的系统上。


您的时间戳不是标准的 java 可解析格式。因此,为了解析它们,您需要编写自定义代码来处理此类格式。

一些观察结果:

亚洲/加尔各答不是有效的可解析时区,因此您需要一些 获取相应时区的机制。

8:00 也不是 java 中有效的可解析时区,因此您需要 某种机制将其格式化为有效值 +08:00

记住以上几点,以下代码将为您完成所需的工作。

    SimpleDateFormat dateFormatTZGeneral = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
    SimpleDateFormat dateFormatTZISO = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS XXX");
    SimpleDateFormat dateFormatWithoutTZ = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");


    String[][] zoneStrings = DateFormatSymbols.getInstance().getZoneStrings();

    Date date = null;

    String[] timeStampSplits = timestamp.split(" ");
    if(timeStampSplits.length>2) {

        String timezone = timeStampSplits[2];
        //First Case Asia/Calcutta
        if(Character.isAlphabetic(timezone.charAt(timezone.length()-1))) {

            for(String[] zoneString: zoneStrings) {
                if(zoneString[0].equalsIgnoreCase(timezone)) {
                    timeStampSplits[2] = zoneString[2];
                    break;
                }
            }

            timestamp = createString(timeStampSplits," ");
            date = getDate(timestamp, dateFormatTZGeneral);
        } else {
            //Second Case 8:00
            timeStampSplits[2] = formatTimeZone(timeStampSplits[2]);

            timestamp = createString(timeStampSplits," ");
            date = getDate(timestamp, dateFormatTZISO);
        }

    } else {
        // Third Case without timezone
        date = getDate(timestamp, dateFormatWithoutTZ);
    }

    System.out.println(date);

    TIMESTAMPTZ oraTimeStamp = new TIMESTAMPTZ(<connection object>,new java.sql.Timestamp(date.getTime());

上面的代码使用了以下实用方法

private static Date getDate(String timestamp, SimpleDateFormat dateFormat) {
    Date date = null;
    try {
        date = dateFormat.parse(timestamp);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return date;
}

private static String createString(String[] contents, String separator) {
    StringBuilder builder = new StringBuilder();
    for (String content : contents) {
        builder.append(content).append(separator);
    }
    builder.deleteCharAt(builder.length()-separator.length());

    return builder.toString();
}

private static String formatTimeZone(String timeZone) {
    String[] timeZoneSplits = timeZone.split(":");
    DecimalFormat formatter = new DecimalFormat("+##;-#");
    formatter.setMinimumIntegerDigits(2);

    timeZoneSplits[0] = formatter.format(Integer.parseInt(timeZoneSplits[0]));
    return createString(timeZoneSplits, ":");
}

此代码是专门为满足您的时间戳示例而编写的,任何偏差可能无法由此处理,并且需要更多自定义。

希望这对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将“Java.lang.String”转换为“oracle.sql.TIMESTAMPTZ” 的相关文章

随机推荐

  • 将变量从 python 文件传递​​到机器人框架变量

    我在机器人框架中分配变量为 Variables TestNAME test 但是我可以从 python 文件传递 变量值吗 test py var test 是否可以赋值var to TESTNAME 如果您有一个名为 test py 的文
  • 根据行/列值设置 GridView 值 ItemStyle 前景色

    我有一个 ASP netGridView输出三列数据 订单编号 订单状态和订单日期 我想设置OrderStatus Field Value RED IF the status Cancelled 我不确定如何查看输出每行的该字段的值并确定状
  • 通过客户端 XHR 打开 Soundcloud Track 的stream_url?

    由于您可以通过 XHR 调用 Soundcloud API 因为它发送的 CORS 标头http backstage soundcloud com 2010 08 of cors we do http backstage soundclou
  • 如何在包含 500+ 张图片的页面上实现延迟加载?

    我基本上有一个预订引擎单位结果页面must显示 40 个单元 每个单元有 1 个大图像的第一个缩略图和 X 个伴随的缩略图 我一直在使用 jquery 延迟加载插件 但它不够彻底 我在 DOM Ready 上调用它 而且它在 IE 中不起作
  • 将位于 SharePoint Server 中的 Excel 文件导入到 SSIS

    在 SSIS 数据流任务中 我寻求使用连接到位于 SharePoint 服务器中的 xlsx 文件的 Excel 源任务来导入数据 最好不要下载其他软件 在 Excel 连接管理器中 我使用以下 Excel 文件路径格式 UNC sps s
  • setData() 上的 CKEditor 内存泄漏

    我认为我遇到了一些与 CKeditor setData 函数相关的大内存泄漏 我有一个网络应用程序 用户可以使用 Javascript 设计自己的内容 CKEditor作为所见即所得的编辑器 供用户编写设计各部分的内容 每次用户单击其设计中
  • extjs - 如何禁用商店分页

    每当商店 Ext data Store 从服务器读取数据 它发送分页参数 例如 page 1 start 0 limit 25 in a json代理或 page 1 start 0 limit 25 用一个direct proxy 我想在
  • 使用图像代替 Bootstrap 的字形图标

    I would like to use a custom image in an input group instead of a Bootstrap glyphicon without padding bottom my image to
  • 使用 Rxjava 检测值变化

    我们可以使用 RxJava 检测类成员值是否发生更改吗 假设一个类中有一个变量 var 现在我们可以使用 RxJava 在 var 的值发生变化时收到通知 你可以使用这样的东西 private final BehaviorSubject
  • 在 MATLAB 中对文本进行聚类

    我想在 MATLAB 中对文本进行层次凝聚聚类 说吧 我有四句话 I have a pen I have a paper I have a pencil I have a cat 我想把上面的四个句子聚类一下 看看哪个更相似 我知道统计工具
  • 在车把的助手中渲染模板

    因为这个问题似乎没有答案 通过车把部分传递变量 https stackoverflow com questions 11523331 passing variables through handlebars partial然而 我目前正在研
  • 与 Python 等效的字符串格式化,使用 Perl 中的字典和哈希值进行格式化

    我喜欢 Python 使用字典格式化字符串的方式 print key1 s and key2 s aDictObj 我想在 Perl 中使用哈希来实现同样的目标 有没有任何片段或小型库可以做到这一点 EDIT 感谢您尝试这个答案 至于我 我
  • 从 javascript 脚本重定向 document.write

    我们希望在我们的网站上投放广告 但与我们洽谈的广告服务器在为我们提供足够快的广告速度方面存在问题 我认为问题是我们应该包括我们要在其中显示广告 然后它将下载脚本并使用 document write 插入一些 html 问题是对广告商网站的调
  • 在 MySQL 数据库中存储 IP 地址(IPv4 和 IPv6)

    好吧 现在我知道类似的问题可能已经被问过一百万次了 但我在这方面是一个真正的新手 我真的很感谢你在这里的帮助 基本上 我想将访问者的 IP 地址存储在 MySQL 中 以便以后检索和验证 我首先需要知道需要使用什么类型的字段来存储 IP 地
  • 如何在android中将网站中的JSON对象解析为数组列表

    如何将 Web 链接中的 JSON 对象解析到 Android 中并将不同的值存储到 ArrayList 中 用户的 JSON 对象如下所示 它来自一个网站 Users name Kane lon 4 371645 lat 31 39691
  • 全局数据库连接参数的存储位置

    Perl 中是否有存储数据库连接参数和其他全局设置的约定 类似于 NET 的 config 文件 背景 我继承了一个基于 Perl 的大型应用程序 其中有一堆 CGI 脚本和几个后台服务 所有这些服务都有硬编码的数据库主机名 用户名和密码
  • 在matlab中读取文本文件(数据转换)

    我正在读取一个文本文件matlab 这是代码 allData textread file s delimiter n numericalArray cellfun s sscanf s f allData un 0 Get Header h
  • 触发下拉菜单的变化事件

    我想使用jquery触发 document ready中下拉列表的更改事件 我在用户详细信息页面中有一个国家和州的级联下拉菜单 我如何使用 C 在 MVC 中设置国家 地区和州的值 根据用户 ID 从数据库中获取 我不太了解 JQuery
  • AWS - Cloudfront - 如何使用 Origin 自定义标头

    我对 AWS 还很陌生 现在正在参加一些不同的培训课程 我偶然发现的有趣的事情之一是能够在 Cloudfront 中添加自定义标头 也就是说 我似乎无法弄清楚 或找到简单易懂的文档 如何使用 利用此功能提供的功能 有人可以告诉我如何 如何访
  • 将“Java.lang.String”转换为“oracle.sql.TIMESTAMPTZ”

    我有以下这些Java lang String代表的值String的价值TIMESTAMPTZ 我需要转换这些Java lang String TO oracle sql TIMESTAMPTZ 2016 04 19 17 34 43 781