datetime—如何解析utc时间戳并将其转换为java中的另一种格式

tuwxkamq  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(310)

嗨,我有utc时间戳,我需要解析转换成ist格式,我用它从msc(电信基站)接收utc时间戳的形式 string : 1307261822062B0530 它可以分为

13 07 26 18 22 06 2B 05 30

yy  =   13
MM  =   07
DD  =   26
hh  =   18
mm  =   22
ss  =   06
S   =   2B (how do iconvert this value into + / -)
hh  =   05 
mm  =   30

问题是将符号(+/-)转换为接收到的世界时的加减
我正试着用吼叫来解析

public static String formatRawTimeStamp(String rawTimeStamp){

      String[] arr_msisdn = rawTimeStamp.split("(?<=\\G.{2})"); // split every two character  
      String formatedDate = "";
      Date date;
      DateFormat srcFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss.ssZ");
      DateFormat desFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      if(arr_msisdn.length >= 6){

        try {

            date = (Date)srcFormat.parse(arr_msisdn[0]+"-"+arr_msisdn[1]+"-"+arr_msisdn[2]+" "+arr_msisdn[3]+":"+arr_msisdn[4]+":"+arr_msisdn[5]+"."+arr_msisdn[6]+""+arr_msisdn[7]+""+arr_msisdn[8]);
            formatedDate = desFormat.format(date);

        } catch (ParseException e) {

            e.printStackTrace();
        }
      }

      return formatedDate;
  }

但我有个例外

java.text.ParseException: Unparseable date: "13-07-30 18:45:11.2b0530"
    at java.text.DateFormat.parse(DateFormat.java:354)
    at org.bouncycastle.asn1.util.ASNUtil.formatRawTimeStamp(ASNUtil.java:199)
    at org.bouncycastle.asn1.util.MOCallEvent.decode(MOCallEvent.java:187)
    at org.bouncycastle.asn1.util.ZTEASN1DecodeApp.decode(ZTEASN1DecodeApp.java:114)
    at org.bouncycastle.asn1.util.ZTEASN1DecodeApp.main(ZTEASN1DecodeApp.java:80)

听不懂了 "2b" 表示符号(+/-)的值

S   =   Sign 0 = “+”, “-“       ASCII encoded

我怎样才能解决这个问题。任何帮助都将不胜感激。

g0czyy6m

g0czyy6m1#

为什么不在解析之前简单地替换字符呢?

String input = "1307261822062B0530";
String adjusted = input.replaceAll("2[Bb]", "+").replaceAll("2[Aa]", "-");

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyMMddHHmmssZ");
OffsetDateTime odt = OffsetDateTime.parse(adjusted, fmt); //2013-07-26T18:22:06+05:30

我假设输入可以包含 2B 或者 2b 为了 + 以及 2A 或者 2a 为了 - .
如果要使用SimpleDataFormat,可以应用相同的逻辑。

相关问题