私は16ビットでint日付を取得しました。最初の7ビット(左から右へ)は年を記述するために使用され、次の4ビットは月のために使用され、残りの5ビットは日のために使用されます。それぞれの7,4,5ビットを元の16ビットから分離する必要があります(年は1111111000000000、月は0000000111100000、日は0000000000011111)。1バイト日付を年、月、日にデコードする
答えて
更新ソリューション:
私はまだ、これは具体的なコードは彼の質問に記載しなかったとして、OPが探しているものであるかどうかわかりません。
同様に、期待される出力が何であるかはわかりませんでした。私たちが知っているのは、OPに16ビットのバイナリが与えられていて、特定の方法でYear、Month、Dayのバイナリコードを調べる必要があるビット位置。
バイナリがキャプチャされたら、バイナリビットを数値に変換し、それをさらに比較するために使用します。
private long unsetBit(long value, int pos) { return value & ~(1<<pos); }
private long getYear(long value) { return value >> /*total 0 in month and day=*/9; }
private long getMonthDay(long value) {
int[] leftBitPos = new int[]{ 16, 15, 14, 13, 12, 11, 10 };
for (Integer position : leftBitPos) value = unsetBit(value, position);
return value;
}
private long getMonth(long value) {
value = getMonthDay(value);
return value >> /*total 0 in day=*/5;
}
private long getDay(long value) {
int[] leftBitPos = new int[]{ 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5 };
for (Integer position : leftBitPos) value = unsetBit(value, position);
return value;
}
private void doIt() {
long fullDate = 0b1111111110100001;
System.out.println("Year binary: " + getYear(fullDate));
System.out.println("Month binary: " + getMonth(fullDate));
System.out.println("Day binary: " + getDay(fullDate));
年バイナリ:127
例えば、> 100の年の値は、それが年> 2000年
月バイナリ:29
日バイナリ:1私の解決策であることを意味します
古い解決法、regexpr方法。
OPはバイナリ値をStringに変換し、 "Year"、 "Month"、 "Day"のバイナリコードに興味があると仮定していると仮定します。
単純なcapture
正規表現を実行して、特定の日付の0と1を検索し、取り込まれた値をさらに0にパディングして処理することを提案します。あるいは、regexprを使いたくない場合は、string.substringを実行して同じことを行い、ゼロで埋めてください。
regexprを使用することをお勧めします。 ^(?=[0-1]{16})([0-1]{7})([0-1]{4})([0-1]{5})
これは基本的には何ですか。
- 最初の文字
^
(?=[0-1]{16)
チェックから、最初の文字から文字列- で16の0と1の文字が年の最初の7
0
と1
、([0-1]{7})
をキャプチャしているかどうかを確認します。 - 今ゼロの適切な量を使用して年、月と日の結果値をプレフィックスとパッド
([0-1]{4})([0-1]{5})
を通じて、それぞれの月と日のために同じことをします。
例:
final String YEAR_PADDING = "0000000";
final String MONTH_PADDING = "0000";
final String DAY_PADDING = "00000";
private void doIt() {
Pattern binaryDateFormat = Pattern.compile("^(?=[0-1]{16})([0-1]{7})([0-1]{4})([0-1]{5})");
Matcher m = binaryDateFormat.matcher("1111111111100000");
while (m.find()) {
System.out.println("Year binary: " + m.group(1) + MONTH_PADDING + DAY_PADDING);
System.out.println("Month binary: " + YEAR_PADDING + m.group(2) + DAY_PADDING);
System.out.println("Day binary: " + YEAR_PADDING + MONTH_PADDING + m.group(3));
}
}
出力:
年バイナリ:1111111000000000
月バイナリ:0000000111100000
日バイナリ:0000000000000000
@ GMP_47これはあなたのためにもっとうまく議論することを願っています –
私はそれを方法として定義することはできません。私は "int date = buffer.getInt();"からintを取得します。私はちょうど1111111000000000で日付を掛ける方法を知って、そしてJavaで右9をシフトする必要があります。 –
私はあなたの質問を正しく理解していなかったが、具体的なコードがなければ、私はあなたがテキストから欲しいものを作ることしかできなかったことを謝罪します。 OK。だから、 '日付'は何ですか?価値観はどのように見えますか?バイナリをシフトしたかったのは、ここで最初の7桁だけを欲しかったからです。また、Intを文字列に変換して、私のサンプルコードにプラグインし、それに応じて出力を微調整できないのはなぜですか? –
- 1. Python形式の日付は「1991年1月1日月曜日」
- 2. mySql:2000年1月1日から2000年1月1日に日付を変換
- 3. 日付ピッカー - 月/年
- 4. 日付を日/月/年(2012年1月20日)のPythonに変換するには
- 5. 1970年1月1日より前の日付をR
- 6. ラテックス日付日時計算月日年
- 7. strtotimeと日付のバリデーション(01/20/2011と2011年1月1日)
- 8. moment.jsの日付をフォーマットする(デバッガによる)2016年1月1日
- 9. Bigqueryの完全な日付(年月日)〜(年月)
- 10. R文字列の日付(例:「2014年10月1日」)を日付形式
- 11. 生年月日から年月日
- 12. システム日付とスプリット日、月、年
- 13. SQL Serverのデフォルトの日付を1900年1月1日に削除します。
- 14. 年/月/日を年月日に変更する
- 15. Angularjs - フォーマットの日付(2016年1月13日)
- 16. 1月1日から先月の日付に変換する
- 17. 2012年2月7日火曜日に変換する日付2012年2月7日
- 18. 特定の日付から日付、月、年を取得する
- 19. 「日月年」の日付に変換する日付を秒で表します
- 20. 日付ピケットの日付形式をデータベースの日付形式と一致するように変更する方法(月/日/年から日/月/年)
- 21. 日付とは別に日、月、年を取得する
- 22. 毎年1月1日のクロノッブ
- 23. Android:年月日を使用して日付を取得する
- 24. javascript作成日年月日
- 25. jQuery Fullcalendar、日付(2011,12,25)は2012年1月25日に表示されます
- 26. Google Appsスクリプトで日付、年、月、日を計算する
- 27. 月、日、年だけで日付ピッカーショーを変更する方法
- 28. 昨年9月の日付を取得
- 29. 時間、日付、日時、曜日、週、年の月など
- 30. 日付形式を'08年8月1日00:00:00 PDT 2000 'から'01年8月1日00:00:00 PDT 2000'に変更する方法
あなたはこれまで何をしましたか?あなたのコードを私たちに教えてください。そして、あなたは[this](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)が役に立ちます。 –
Google ['java bit manipulation'](https://www.google.com/search?q=java+bit+manipulation)。 – Andreas
だから何が問題なのですか?何が問題になっていますか? –