如何在java

时间:2016-03-27 11:26:15

标签: java

我不熟悉java,我需要获取当前日期时间并将其表示为字符串,例如:

#1:135790246811221:1:*,00000000,UP,060B08,0D1908#

其中060B08是YYMMDD:GPS日期(2006年11月8日)。 6个字符,十六进制。

和0D1908是HHMMSS:发送时间,6个字符,十六进制

YYMMDD:发送日期(13:25:08),6个字符,十六进制,例如::代表060B08。

我正在尝试此代码:

Calendar cal = Calendar.getInstance();
Date date = new Date();
String date_str = String.format("%02x%02x%02x", cal.getTime().getYear(), cal.getTime().getMonth(), cal.getTime().getDay());
String hour_str = String.format("%02x%02x%02x", cal.getTime().getHours(), cal.getTime().getMinutes(), cal.getTime().getSeconds());
String content = "#1:" + imei + ":1:*,00000000,UP,"+ date_str.getBytes() +","+ hour_str.getBytes()+"#";
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeBytes(content.getBytes(Charset.defaultCharset()));
channel.write(buf);

但错了,正在回归:

#1:359672050130411:1:*,00000000,UP,[B@7f07ff6a,[B@d4dd3b6#

2 个答案:

答案 0 :(得分:0)

Calendar.getTime()返回DateDate.getYear()已被弃用,Date.getHours()和其他大多数用户也已弃用。

理想情况下,您应该使用Calendar.get(Calendar.YEAR)和Calendar.get(Calendar.HOUR_OF_DAY)。

同样适用于月,日,分和秒。

获得整数值后,您可以使用Integer.toHexString()将其转换为十六进制(如果需要)

答案 1 :(得分:0)

您可以使用格式化程序格式化日期并计算十六进制,如下所示:

public static void main (String[] args) throws Exception
{
    SimpleDateFormat dateF = new SimpleDateFormat("yyMMdd");
    SimpleDateFormat timeF = new SimpleDateFormat("HHmmss");
    Date date = new Date();
    String dateHex = String.format("%020x", new BigInteger(1, dateF.format(date).getBytes("UTF-8")));
    String timeHex = String.format("%020x", new BigInteger(1, timeF.format(date).getBytes("UTF-8")));
    System.out.println("#1:359672050130411:1:*,00000000,UP," + dateHex + "," + timeHex + "#");
}

输出:

#1:359672050130411:1:*,00000000,UP,00000000313630333237,00000000313135363130#