知识大全 手动解析snmp的dateAndTime类型

Posted 字节

篇首语:百日连阴雨,总有一朝晴。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 手动解析snmp的dateAndTime类型相关的知识,希望对你有一定的参考价值。

手动解析snmp的dateAndTime类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  DateAndTime是Snmpv 中的一种数据类型 它主要提供了对日期时间的描述 我在使用Snmp j开发包时 发现其不提供对DateAndTime类型的支持 而有时又需要用到该类型 于是 自己写了一个方法解析该类型 可以实现对DateAndTime类型的格式化 并且可以方便地提取各时间项

  下面是RFC中对DateAndTime的定义

  DateAndTime ::= OCTET STRING (SIZE ( | ))

   A date time specification for the local time of day

   This data type is intended to provide a consistent

   method of reporting date information

  

   field octets contents range

   _____ ______ ________ _____

   year

   (in neork byte order)

   month

   day

   hour

   minutes

   seconds

   (use for leap second)

   deci seconds

   direction from UTC + /

   (in ascii notation)

   hours from UTC

   minutes from UTC

  

   Note that if only local time is known then

   timezone information (fields ) is not present

  由定义可见 DateAndTime仍然是OCTET STRING类型的数据 只是对每个字节进行了具体的定义 比如前两个字节表示年 第五个字节表示小时等 所以如果某个开发包中没有DateAndTime类型 那么大可以用Octet类型去代替 但是这样做得到的只是一些无意义的乱码而已 因此 实现的关键就在于按照定义对特殊的Octet数据进行正确的解析

  既然DateAndTime也是Octet String 那么我们就可以按照字节数组来处理他

  import java util Vector;

  import apache log j Logger;

  import snmp j CommandResponderEvent;

  import snmp j PDU;

  import snmp j smi OctetString;

  import snmp j smi Variable;

  import snmp j smi VariableBinding;

  import diation snmp SNMPManager;

  import diation util INMSLog;

  public class SNMPAdapter  extends SNMPManager

  private Logger adapterlog = INMSLog getInstance() getAdapterLog()

  private Logger recvlog = INMSLog getInstance() getReceiveLog()

  public SNMPAdapter(String snmpIP String snmpPort)

  super(snmpIP snmpPort)

  

  @Override

  protected void notifyMsg(CommandResponderEvent event)

  ( Mapper::notifyMsg》    =====NOTIFY_ALarm===== )

  PDU pdu = event getPDU()

  Vector vec = pdu getVariableBindings()

  ( YYWifiMapper::process》    oid size = + vec size())

  for (int i = ; i < vec size() i++)

  String oidNameValue = ;

  VariableBinding vb = (VariableBinding)vec get(i)

  if (vb getVariable() instanceof OctetString)

  String value = new String(((OctetString)vb getVariable()) getValue())

  if(vb getOid() toString() trim() equals( ) )

  oidNameValue = OID: +vb getOid()+ \\t + value: + parseDateAndTime(vb getVariable())

  

  else

  oidNameValue = OID: +vb getOid()+ \\t + value: + value trim()

  

  

  else

  //略

  

  

  

  public String parseDateAndTime(Variable v)

  ( YYWifiMapper::parseDateAndTime》    v= +v)

  //        ( YYWifiMapper::parseDateAndTime》    v string= +v toString())

  OctetString oct = (OctetString)v;

  //        ( YYWifiMapper::parseDateAndTime》    v hex= + oct toHexString())

  byte[] bts = oct getValue()

  byte[] format_str = new byte[ ];   //保存格式化过后的时间字符串

  int year;

  int month;

  int day;

  int hour;

  int minute;

  int second;

  int msecond;

  //        for(byte b:bts)

  //            ( YYWifiMapper::parseDateAndTime》    bts: +b)

  //       

  year=bts[ ]* + +bts[ ];        //( YYWifiMapper::parseDateAndTime》    year: +year)

  month=bts[ ];

  day=bts[ ];

  hour=bts[ ];

  minute=bts[ ];

  second=bts[ ];

  msecond=bts[ ];

  //以下为格式化字符串

  int index= ;

  int temp=year;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  format_str[ ]= ;

  index= ;

  temp=month;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  format_str[ ]= ;

  index= ;

  temp=day;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  format_str[ ]= ;

  index= ;

  temp=hour;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  format_str[ ]= : ;

  index= ;

  temp=minute;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  format_str[ ]= : ;

  index= ;

  temp=second;

  for( index>= ; index )

  format_str[index]=(byte)( +(temp temp/ * ))

  temp/= ;

  

  //        format_str[ ]= ;

  //        index= ;

  //        temp=msecond;

  //        for( index>= ; index )

  //            format_str[index]=(byte)( +(temp temp/ * ))

  //            temp/= ;

  //       

  //

  //        format_str[ ]= ;

  //        ( YYWifiMapper::parseDateAndTime》    format_str = + new String(format_str))

  return new String(format_str)

  

  

  实际运行log如下(注意值为 进制)

  YYWifiMapper::parseDateAndTime》  v= :dc: : : : : b: : b: :

  YYWifiMapper::parseDateAndTime》  format_str = : :

  处理年的时候稍有不同 因为年是由两个字节表示 所以要用高位字节乘 再加低位字节 处理语句为year=bts[ ]* + +bts[ ];标准的时间输出格式应该为YYYY MM DD HH:MM:SS形式

  其实自己用计算器就能算出时间 很简单了

  主要是年的计算byte是可以为负值 所以手动计算的公式

   * + dc = * + = 年 或者 * + ( + dc) = * + ( + ( )) = 年

   = 月

   = 日

   = 时

   = 分

cha138/Article/program/Java/hx/201311/26305

相关参考

什么叫盘车装置?有几种类型?

  汽轮机启动前或停机后,用来盘动转子的装置称为盘车装置。一般可分为手动和电动盘车两种。

中医解析白癜风类型

中医治疗白癜风是从患者整体出发,患者不能听信他人的治疗方案来进行自身的治疗,下面就让中医专家为大家解析白癜风都有哪些类型:中医专家称,中医学精髓中医辨证法是建立在科学的基础上发展而来,这种方法主要就是

中医解析白癜风类型

中医治疗白癜风是从患者整体出发,患者不能听信他人的治疗方案来进行自身的治疗,下面就让中医专家为大家解析白癜风都有哪些类型:中医专家称,中医学精髓中医辨证法是建立在科学的基础上发展而来,这种方法主要就是

中医解析红斑狼疮类型

红斑狼疮是一类自身免疫系统的疾病,常常会让患者的全身呈红斑状,且病情会反复发作。这类并且多发于女性身上,严重者能渗透全身多个脏器官,因此我们来看看中医是如何解析红斑狼疮的各种类型:一、气阴两虚余热型症

中医解析红斑狼疮类型

红斑狼疮是一类自身免疫系统的疾病,常常会让患者的全身呈红斑状,且病情会反复发作。这类并且多发于女性身上,严重者能渗透全身多个脏器官,因此我们来看看中医是如何解析红斑狼疮的各种类型:一、气阴两虚余热型症

解析鱼类混养类型

在同一水体里放养栖息习性不同、食性各异的异种同龄和同种异龄不同规格的鱼类,是中国池塘养鱼技术的特色和核心。混养的鱼类应为习性相关,对水质和水温(在生长季节)要求相似。混养的理想鱼类有鲢鱼、鳙鱼(上层鱼

解析鱼类混养类型

在同一水体里放养栖息习性不同、食性各异的异种同龄和同种异龄不同规格的鱼类,是中国池塘养鱼技术的特色和核心。混养的鱼类应为习性相关,对水质和水温(在生长季节)要求相似。混养的理想鱼类有鲢鱼、鳙鱼(上层鱼

知识大全 全面解析Java中的String数据类型

全面解析Java中的String数据类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先Str

白癜风类型解析

1、固岛型白癜风:在患者脂肪堆积比较多的地方容易出现白斑,如小腹、下巴等,其他部位也会出现,病灶在很长时间里都不会发生变化,出现一些黑色素岛。造成这种外形的原因是外用刺激药过量,致病灶起泡,层层脱皮,

白癜风类型解析

1、固岛型白癜风:在患者脂肪堆积比较多的地方容易出现白斑,如小腹、下巴等,其他部位也会出现,病灶在很长时间里都不会发生变化,出现一些黑色素岛。造成这种外形的原因是外用刺激药过量,致病灶起泡,层层脱皮,