我不熟悉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#
答案 0 :(得分:0)
Calendar.getTime()返回Date。 Date.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#