http://www.rgagnon.com/javadetails/Java-0506.html で「解決策」を見ましたが、正しく機能しません。例えば。昨日(6月8日)は159だったはずですが、245だったそうです。
では、誰かがJavaで現在の日付の3桁のユリウス日(ユリウス日ではなく、今年はその日が必要です)を取得するための解決策を持っていますか?
ありがとう!マーク
必要なのが曜日だけの場合は、GregorianCalendars DAY_OF_YEAR
フィールドを使用してみませんか?
import Java.util.GregorianCalendar;
public class CalTest {
public static void main(String[] argv) {
GregorianCalendar gc = new GregorianCalendar();
gc.set(GregorianCalendar.DAY_OF_MONTH, 8);
gc.set(GregorianCalendar.MONTH, GregorianCalendar.JUNE);
gc.set(GregorianCalendar.YEAR, 2010);
System.out.println(gc.get(GregorianCalendar.DAY_OF_YEAR));
}
}
または、今日のユリウス日と今年の1月1日の日付の差を計算することもできます。ただし、1月1日は1年のゼロ日ではないため、必ず結果に1を追加してください。
int[] now = {2010, 6, 8};
int[] janFirst = {2010, 1, 1};
double dayOfYear = toJulian(now) - toJulian(janFirst) + 1
System.out.println(Double.valueOf(dayOfYear).intValue());
DateFormat d = new SimpleDateFormat("D");
System.out.println(d.format(date));
import Java.util.Calendar;
// ...
final int julianDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);
これは、あなたが参照したその奇妙なサイトによって主張された「正午から始まる」取引を考慮に入れていないことに注意してください。もちろん、時間を確認するだけで修正できます。
コーディアントデシジョンマネージャーなどの二重ユリウス日を取得した場合
以下は機能していますが、2番目は処理されません Java日付とユリウス日番号の間で変換するにはどうすればよいですか?
public static String julianDate(String julianDateStr){
try{
// Calcul date calendrier Gr?gorien ? partir du jour Julien ?ph?m?ride
// Tous les calculs sont issus du livre de Jean MEEUS "Calcul astronomique"
// Chapitre 3 de la soci?t? astronomique de France 3 rue Beethoven 75016 Paris
// Tel 01 42 24 13 74
// Valable pour les ann?es n?gatives et positives mais pas pour les jours Juliens n?gatifs
double jd=Double.parseDouble(julianDateStr);
double z, f, a, b, c, d, e, m, aux;
Date date = new Date();
jd += 0.5;
z = Math.floor(jd);
f = jd - z;
if (z >= 2299161.0) {
a = Math.floor((z - 1867216.25) / 36524.25);
a = z + 1 + a - Math.floor(a / 4);
} else {
a = z;
}
b = a + 1524;
c = Math.floor((b - 122.1) / 365.25);
d = Math.floor(365.25 * c);
e = Math.floor((b - d) / 30.6001);
aux = b - d - Math.floor(30.6001 * e) + f;
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, (int) aux);
double hhd= aux-calendar.get(Calendar.DAY_OF_MONTH);
aux = ((aux - calendar.get(Calendar.DAY_OF_MONTH)) * 24);
calendar.set(Calendar.HOUR_OF_DAY, (int) aux);
calendar.set(Calendar.MINUTE, (int) ((aux - calendar.get(Calendar.HOUR_OF_DAY)) * 60));
// Calcul secondes
double mnd = (24 * hhd) - calendar.get(Calendar.HOUR_OF_DAY);
double ssd = (60 * mnd) - calendar.get(Calendar.MINUTE);
int ss = (int)(60 * ssd);
calendar.set(Calendar.SECOND,ss);
if (e < 13.5) {
m = e - 1;
} else {
m = e - 13;
}
// Se le resta uno al mes por el manejo de Java, donde los meses empiezan en 0.
calendar.set(Calendar.MONTH, (int) m - 1);
if (m > 2.5) {
calendar.set(Calendar.YEAR, (int) (c - 4716));
} else {
calendar.set(Calendar.YEAR, (int) (c - 4715));
}
SimpleDateFormat sdf=new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
//System.out.println("Appnumber= "+appNumber+" TimeStamp="+timeStamp+" Julian Date="+julianDateStr+" Converted Date="+sdf.format(calendar.getTime()));
return sdf.format(calendar.getTime());
}catch(Exception e){
e.printStackTrace();
}
return null;
}
私はすべての投稿を読みましたが、何かがはっきりしていないと思います。
user912567はジャン・メーウスに言及しました、そして彼は絶対に正しいです
私が見つけた最も正確な定義は、Jean Meeusの「AstronomicalAlgorithms」の本に記載されています(必見です、本当に...)。
ユリウス日はdateで、通常どおり、年、月、日で表されます。
ユリウス日は数値(実数)で、-4712年から数えられ、「...連続した日数...」(および1日の端数)です。 A sefull正確な天文計算に使用されるタイムスケール。
ジャン・メーウス:「ユリウス日はユリウス暦とは何の関係もありません」(「天文アルゴリズム」、第2版、p.59)
@Basil Bourqueの回答に続いて、システムのデフォルトのゾーンIDを使用してユリウス日を取得するための実装を以下に示します。
LocalDate localDate = LocalDate.now(ZoneId.systemDefault());
int julianDay = localDate.getDayOfYear();