21

http://www.rgagnon.com/javadetails/java-0506.htmlで「解決策」を見ましたが、正しく機能しません。たとえば、昨日(6月8日)は159だったはずですが、245だったとのことです。

では、誰かが現在の日付の3桁のユリウス日(ユリウス日ではなく、今年はその日が必要です)を取得するためのJavaのソリューションを持っていますか?

ありがとう!マーク

4

9 に答える 9

11
DateFormat d = new SimpleDateFormat("D");
System.out.println(d.format(date));
于 2013-06-26T11:06:17.293 に答える
9
于 2016-07-07T22:40:42.103 に答える
8

必要なのが1年の日だけの場合は、GregorianCalendarsDAY_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日はその年の0日ではないため、結果に必ず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());
于 2010-06-09T12:32:48.483 に答える
6
import java.util.Calendar;
// ...
final int julianDay = Calendar.getInstance().get(Calendar.DAY_OF_YEAR);

これは、あなたが参照したその奇妙なサイトによって主張された「正午から始まる」取引を考慮に入れていないことに注意してください。もちろん、時間を確認するだけで修正できます。

于 2010-06-09T12:08:25.947 に答える
4

私はすべての投稿を読みましたが、何かがはっきりしていないと思います。

user912567はJeanMeeusに言及しました、そして彼は絶対に正しいです

私が見つけた最も正確な定義は、Jean Meeusの「AstronomicalAlgorithms」の本で与えられています(本当に持っている必要があります...)。

ユリウス日は、通常どおり、年、月、日で表される日付です。

ユリウス日は、-4712年から数えた数値(実数)であり、「...連続した日数...」(および1日の端数)です。正確な天文計算に使用される有用な時間スケール

ジャン・メーウス:「ユリウス日はユリウス暦とは何の関係もありません」(「天文アルゴリズム」、第2版、p.59)

于 2016-02-27T08:17:42.487 に答える
2

聖職者の意思決定マネージャーなどの二重ユリウス日を取得した場合

http://java.ittoolbox.com/groups/technical-functional/java-l/java-function-to-convert-julian-date-to-calendar-date-1947446

以下は機能していますが、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;

}  
于 2011-08-25T16:43:15.320 に答える
1

紀元前4713年以降の日数のようにユリウス日を探している場合は、代わりに次のコードを使用できます。

private static int daysSince1900(Date date) {
    Calendar c = new GregorianCalendar();
    c.setTime(date);

    int year = c.get(Calendar.YEAR);
    if (year < 1900 || year > 2099) {
        throw new IllegalArgumentException("daysSince1900 - Date must be between 1900 and 2099");
    }
    year -= 1900;
    int month = c.get(Calendar.MONTH) + 1;
    int days = c.get(Calendar.DAY_OF_MONTH);

    if (month < 3) {
        month += 12;
        year--;
    }
    int yearDays = (int) (year * 365.25);
    int monthDays = (int) ((month + 1) * 30.61);

    return (yearDays + monthDays + days - 63);
}

/**
 * Get day count since Monday, January 1, 4713 BC
 * https://en.wikipedia.org/wiki/Julian_day
 * @param date
 * @param time_of_day percentage past midnight, i.e. noon is 0.5
 * @param timezone in hours, i.e. IST (+05:30) is 5.5
 * @return
 */
private static double julianDay(Date date, double time_of_day, double timezone) {
    return daysSince1900(date) + 2415018.5 + time_of_day - timezone / 24;
}

上記のコードはhttps://stackoverflow.com/a/9593736に基づいているため、1900年から2099年までの日付に制限されています。

于 2020-05-20T07:39:11.590 に答える
0

@Basil Bourqueの回答に続いて、システムのデフォルトのゾーンIDを使用してユリウス日を取得するための実装を以下に示します。

LocalDate localDate = LocalDate.now(ZoneId.systemDefault());
int julianDay = localDate.getDayOfYear();
于 2019-11-12T07:36:22.157 に答える
-1

次の方法で「ユリウス日」または「通常日」を取得することもできます。

import java.util.Calendar;
import java.util.Date;

public class MyClass {

  public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    LocalDate myObj = LocalDate.now();
    System.out.println(myObj);
    System.out.println("Julian Date:" + cal.get(Calendar.DAY_OF_YEAR));

  }
}
于 2019-08-27T10:39:04.390 に答える