2016-12-12 10 views
1

私はアンドロイドBLEを使っています。現在の時刻は32ビットのUNIXタイムスタンプとタイムオフセットとして表示されます

特性に書き込む必要があります現在の時刻は32ビットUNIXのタイムスタンプです。その後、UTCから現在のタイムゾーンオフセット(秒)を書き込みます。おそらく問題は32バイト配列にカバーすることですが、私は100%確実ではありません。

私はそれをしましたが、何かが間違っています。それは非常に迅速に上昇し、最終的に0x7FFF、FFFFを渡す。すなわち、それはオーバーフローし、タイムスタンプが符号付き整数であるので負になる。

private byte[] getCurrentUnixTime() { 
     int unixTime = (int) (System.currentTimeMillis()/1000L); 
     byte[] currentDate = Converter.intTo32ByteArray(unixTime); 
     return currentDate; 
    } 



    private byte[] getCurrentTimeOffset() { 
     TimeZone tz = TimeZone.getDefault(); 
     Date timeNow = new Date(); 
     int offsetFromUtc = tz.getOffset(timeNow.getTime())/1000; 
     byte[] offsetFromUtcByteArray = Converter.intTo32ByteArray(offsetFromUtc); 
     return offsetFromUtcByteArray; 
    } 



public static byte[] intTo32ByteArray(int number) { 

     byte[] byteArray = new byte[]{ 
       (byte) (number >> 24), 
       (byte) (number >> 16), 
       (byte) (number >> 8), 
       (byte) number 

     }; 
     return byteArray; 
    } 

答えて

0

のように、私はバイト配列のコード変換

byte[] offsetFromUtcByteArray = ByteBuffer.allocate(4).order(LITTLE_ENDIAN).putInt((int) offsetFromUtc).array(); 

byte[] currentDate = ByteBuffer.allocate(4).order(LITTLE_ENDIAN).putInt((int) unixTime).array(); 
にこのint型の問題を解決するには、[]バイトを変換することができ、望ましい値を表示するには

1

次に、thisはリジッド変換を使用しています。デフォルトでのJava

、intデータ型32ビット-0x7FFFFFFFの最小値と0x7FFFFFFFで-1 oracleの最大値 を有する2の補数 整数、署名されています。

プレゼンテーション(データではない)に問題があります。 ARGBを使ってintを使って色を再現するのと同じようなケースがあります - それは4 * 8ビットを必要とするので、値は一度positvieです。あなたは長い間、このexample

関連する問題