如何解析UTC时间戳并在java中转换为另一种格式

时间:2016-03-28 11:10:05

标签: java datetime timestamp utc

您好我有UTC时间戳,我需要解析才能将其转换为IST格式 我用来以string : 1307261822062B0530的形式从MSC(电信基站)接收UTC时间戳,它可以如下划分

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

我该如何解决这个问题。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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的{​​{1}}或2b以及+的{​​{1}}或2A

如果要使用simpledateformat,可以应用相同的逻辑。