時間を教えてください。[閉まっている]


55

あなたはあなたの言語の時計/時間APIが壊れていて、まったく信頼できないことを知っています。

したがって、組み込みAPIを使用してシステムの時刻/日付にアクセスすることは許可されていません。

しかし、あなたはあなたの言語が日付の計算を実行し、変数に日付/時刻の値を保持する能力が正しいことも知っています。

日付/時刻/クロックAPIを呼び出さずに現在の日付/時刻を出力するプログラムを作成します。たとえばDateTime.NowGetDate()および同様の機能は許可されていません。

ほとんどの賛成票での答えが勝ちです。

同点の場合、より正確な回答が優先されます(つまり、最大で秒、次にミリ秒、マイクロ秒などの精度)。


2
言い換えれば、タイムサーバーと話をしますか?
ピーターテイラー14年

3
はい、できます。1つの可能な解決策。
ミクロ

3
むしろ不特定の質問。ほとんどの票はのような答えで集められると思いprint(input("Please enter the current time"))ます。
ハワード14年

7
私のお金は、「異なる言語のREPLをロードし、その非中断時間APIを呼び出す」です。
ジョナサンヴァンマトレ14年

2
@swichも許可されていません。あなたの答えは信頼できなくなるからです。
ミクロ

回答:


121

Java

現在のソリューションのほとんどすべては、ローカル/リモートコンピューターが現在の時刻に横たわっていないことを前提としています(T-600も同様に信じますか?)。
時間計算の重要なポイントは純粋な性質を信頼することです。
このAndroidアプリは、ユーザーに空の写真を撮るように要求し、現在の時刻を非常に正確に予測しています:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
   if (resultCode == RESULT_OK) 
   {
      Uri selectedImageUri = data.getData();
      this.imageView.setImageURI(selectedImageUri);

      TimeGuesser guesser = new TimeGuesser(this);
      String result = guesser.guessTimeFromImage(selectedImageUri);
      this.textView.setText(result);   
   }
}

public class TimeGuesser {

    private Context context;
    public TimeGuesser(Context context)
    {
        super();
        this.context = context;
    }

    public String guessTimeFromImage(Uri uri) {
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.context.getContentResolver(), uri);
        } catch (IOException e) {
            return "There is no sky. Everyone's going to die";
        }

        float brightness = getBrightness(bitmap);

        if (brightness < 90.0)
        {
            return "It's sooo late";
        } else {
            return "It's sooo early";
        }
    }

    private float getBrightness(Bitmap bitmap)
    {
        float R, G, B;
        R = G = B = 0.0f;
        int pixelColor;
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int size = width * height;

        for (int x = 0; x < width; ++x) {
            for (int y = 0; y < height; ++y) {
                pixelColor = bitmap.getPixel(x, y);
                R += Color.red(pixelColor);
                G += Color.green(pixelColor);
                B += Color.blue(pixelColor);
            }
        }

        R /= size;
        G /= size;
        B /= size;

        float brightness =  (0.2126f*R ) + (0.7152f*G) + (0.0722f*B);
        return brightness;
    }
}

結果:

ここに画像の説明を入力してください


ここに画像の説明を入力してください


49
+1 "There is no sky. Everyone's going to die":D
ドアノブ

6
「みんな死ぬか、指がカメラの上にある。基本的に同じことだ。」
corsiKa 14年

Javaを指定してください
user1886419 14年

3
これは...私はちょうどそれがタイブレークまで来ていない願っています、間違いなく私のお気に入りです
ドライデンロング

21
Eclipseはどうですか?ここでは、Java開発中と同じくらいの問題を引き起こす可能性があります!
さようなら

64

ルビー

正直に言うと、stackoverflow.comに何かが投稿されたときだけ時間が変化します;)

スクリプトは、一番上の質問の「XYs ago」ラベルの時間を抽出します。

require 'net/http'
source = Net::HTTP.get('stackoverflow.com', '/')

puts source.match(/span title=\"(.*)\" class=\"relativetime/)[1]

出力:

2014-03-10 18:40:05Z

2
秒にのみ正確です...そして、そのSOがそのntpをpingする秒..恥ずべき礼拝
デビッドウィルキンス14年

3
<センター>は彼を抱くことができ
ドアノブ

@Doorknobその投稿を印刷して、壁に掛ける必要があります。
wchargin 14年

30

バッシュ

このような?(必要とwgetしてgrep

wget -qO- 'http://www.wolframalpha.com/input/?i=current+time'|grep ' am \| pm '

数分前に得た出力:

                    Why am I seeing this message? 
  context.jsonArray.popups.pod_0200.push( {"stringified": "6:08:38 pm GMT\/BST  |  Monday, March 10, 2014","mInput": "","mOutput": "", "popLinks": {} });

それともこれ?(必要とwgetしてeog

wget http://c.xkcd.com/redirect/comic/now
eog ./now
rm ./now

私が今得た出力:(xkcdによる画像)

タイムゾーン付きの世界地図http://c.xkcd.com/redirect/comic/now


@tbodtこのコメントが表示されるかどうかはわかりません。http://c.xkcd.com/redirect/comic/now画像をhttp://xkcd.com/now提供すると同時にウェブページを提供するため、編集は無効です。
ace_HongKongIndependence 14年

9
表示される漫画が時刻によって変わることに気付いただけです。すごい。
RJファルコナー14年

2
漫画が夏時間を取り入れていないのは残念です。(たとえば、私が書いているように、米国東部は英国よりも4時間遅れています。漫画が示す通常の5時間ではありません。)さらに重要なことは、北半球と南半球が2時間同期しないことです。
デビッドリチャービー

16
夏時間を守らないためにxkcdに+1を付け、世界の残りがこれに続くことを願っています。
hoosierEE 14年

29

sh / coreutils

touch . && stat . -c %z

多少標準的ではない形式で日付を出力します:
YYYY-MM-DD hh:mm:ss.nanoseconds +timezone
ロケールに依存するかもしれませんが


1
動作しません。それは許可が拒否されたと言う:)
devnull 14年

5
@devnullファイルシステムはひどく壊れています。修正するcd $(mktemp -d)
mniip 14年

Meh、dir時間はライブラリ関数を使用して設定されます。
ナビン14年

@Navin設定されていません。ディレクトリiノードは書き込み用に開かれ、カーネルはそのmtimeを更新します。明示的なありません set mtime to thisどこでも起こっシステムコール
mniip

@mniip Welll、大丈夫。touch望ましい副作用があるので、私はまだそれがライブラリ関数/コマンドであると感じています。
ナビン14年

25

PHP

uniqid()時間に基づいてIDを返すという事実を活用します。

$u=hexdec(substr(uniqid(),0,8));

$y=floor($u/31536000);
$u-=$y*31536000;
$y+=1970;

$d=floor($u/86400);
$u-=$d*86400;

$h=floor($u/3600);
$u-=$h*3600;

$m=floor($u/60);

$s=$u-$m*60;

echo 'Year='.$y.' Days='.$d.' Hours='.$h.' Minutes='.$m.' Seconds='.$s;

私のテスト中に、それが返さ:Year=2014 Days=79 Hours=18 Minutes=9 Seconds=49。正しくフォーマット
するために使用できるかどうかわからないので、date手動で変換しました。


2
私はこれが規則を曲げていると確信しています... uniqidまだあなたの言語の一部です...しかし、それでも+1が得られます
mniip

どうして ?はい、uniqid低レベル時のAPIを使用していますが、外部のサーバから時刻を要求しても、どこかで時間APIへの低レベルのコール...があるでしょう
マイケル・M.

1
ここでAPI呼び出しの時間については話していない。私はそれがまだ言語の一部であると言っています。
mniip 14年

2
@mniipはい、しかしuniqid()この質問が聞かれる前に壊れていました。唯一の時計/タイムAPIはこの質問に壊れている
Riking

23

DNS

自分のマシンだけを信用しないのですか?その場合、これはカウントされますか?

ssh $othermachine date

それがカウントされない場合、DNSアップデートから時間を抽出することは間違いなく行います:

dig stackexchange.com | grep WHEN

23

バッシュ

常に絶対に正確で正しいように:

echo "Now"

または動機付け:

echo "Now, do something useful today"

10
toady、noun、複数のtoadies。卑劣なお世辞。sycophant。(ソース
ace_HongKongIndependence 14年

3
ではありませんがabsolutely precise、コマンドの実行にはまだ少し時間がかかります。
user80551 14年

2
@ user80551そして、それはあなたが間違っていた、今は常に完全に正確です。視聴時間を見ると、画像が目に見える前に変化します。しかし、今、今は常に今です。
Master117 14年

10
@ user80551 echo "Then"はその要件に対応しています。
Taemyr

2
-一体何を見ているの?これがプログラムで起こっているとき?-今!あなたは、今起きているプログラムで今起きていることを、今見ています。-その後、何を追加しますか?-合格した-いつ?
イルマーレ

20

curl-pingレートに関係なく正確

curl -s time.nist.gov:13

いいですが、UTCで、現地時間ではありませんか?
オリオン14年

24
@orion私たちは宇宙にローカルではありませんか?
Pureferret 14年

これは、Windowsが時刻の同期に使用する2つのデフォルトサーバーの1つです。
イスマエルミゲル14年

@IsmaelMiguelそれはまた、多くの非標準的なシステムで使用される...
デビッド・ウィルキンス

言ってるだけ。それが使われる唯一の場所だと言っているのではありません。事実を言っているだけです。
イスマエルミゲル14年


13

Python 2

だから、時計は正しいが、時間APIはホースされていますよね?生のファイルシステムのタイムスタンプをチェックしてみませんか。テストファイルを作成する代わりに、実行するためにスクリプト読み込む必要があるため(コンパイル済みであっても)、独自のアクセスタイムスタンプを使用します。秒に正確です。*

import os
h, m = divmod(os.stat('t.py').st_atime % 86400, 3600)
print h+1, m // 60, m % 60

これを保存し、として実行する必要がありますt.py。または、実行時にスクリプト名を取得しますinspect.getfile(inspect.currentframe())

注*時々前のまで正確です。


確認するt.pycか、t.pyo代わりにすべきですか?
カイルケリー

1
良い考えですが、このファイルをモジュールとしてインポートしない限り(または手動で作成しない限り)これらは存在しません。とにかくチェックし、Python(OS Xの2.7.2)が.py対応するファイル.pycが存在する場合でもファイルに触れます。したがって、これは常に正しく機能します。
アレクシス

注目され、賛成です。よくできました。
カイルケリー

10

ルビー

HTTP、ただし応答メタデータのみを使用。

require 'uri'
require 'net/http'

def get_now
  uri = URI.parse("http://google.com")
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)
  rsp = http.request(request)
  rsp['date']
end

9

PS

ps時間を言えませんか?できる!

sleep 1&  ps -o lstart -p $!

プロセスはバックグラウンドで開始されps、プロセスの開始時刻を通知します。プロセスがバックグラウンドで開始して以来、プロセスの開始時間はほとんど今と同じ時間。

さらに、ローカルタイムゾーンで時刻が取得されるという利点もあります。また、インターネット接続も必要ありません!


7

VBA

私はすべきではないので。

Public Function DateTime() As String
Dim myNTPsvr As String
Dim dattime As String
Dim oHTTP As Object

myNTPsvr = "time.windows.com"
Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oHTTP.Open "GET", "http://" & myNTPsvr & "/", False
oHTTP.Send

DateTime = oHTTP.GetResponseHeader("Date")

Set oHTTP = Nothing
End Function

使用する?DateTimeために使用するか、Excelに入れた場合=DateTime()、式として機能します。
日付/時刻はGMTで返されます-文字列から現地時間に変換する無益な演習として残します


6

バッシュ+ last+ head+cut

秒に正確。lastログファイルを使用します/var/log/wtmp

$ last -RF reboot | head -n1 | cut -c50-73
Tue Mar 11 09:38:53 2014
$ 

編集:head1行のみに制限するために追加されました。

編集:これはLinux Mint 13 Cinnamon 64ビットで動作しますが、これはディストリビューションに依存しているようです。sysvinit-utils(提供するlast)バージョンは(私の場合)2.88dsf-13.10ubuntu11.1 lastからの読み取りである/var/log/wtmpため、結果はそのログファイルに依存します。以下のコメントを参照してください。

編集:どうやらこれはシステムの稼働時間に依存するので、ここで証明を見ることができますhttp://imgur.com/pqGGPmE


ここでは空の行が返されます。そして、私は男のように関連するものは、そこから抽出することができることを確認していないlast「システムを再起動するたびに擬似ユーザー・リブート・ログ」:言う(とさえ、それはここに正しいと思わないpastebin.com/ArUaBcuY
manatwork

@manatwork imgur.com/SeJX9RA実際には、-F完全なログイン時間とログアウト時間を出力します。現在のユーザーはまだログインしているため、ログアウト時間は現在の時間です。これはLinux Mint 13シナモン64ビット上にあります。それはロケールに依存するかもしれませんが、私はそれを疑います。
user80551 14年

それは作品@manatwork ここにも
user80551

2
アーチ(systemd)で壊れています。「実行中」を返します。
オリオン14年

5
実際には、「継続中」は少なくとも哲学的に正しい時間です。
オリオン

5

Python

ナノ秒の精度を取得するのは、返される時間がプログラムの開始時ではなく実行の終了時に基づいていない限り、注意が必要です。それを念頭に置いて、プログラムが終了したときに基づいて時間を計算する方が理にかなっています。これは、精度を高めるために、プログラムの実行を停止するタイミングを制御する必要があることを意味します。

import subprocess

def what_day_is_it(): return int(subprocess.check_output(["date", "+%dd"]))[:-2];

current_day = next_day = what_day_is_it # It's a bash call, 
while not current_day - next_day:
  next_day = what_day_is_it()
print "It's midnight."
print "Probably."

これは、Pythonクロックが停止している間、bashクロックが停止していないか、少なくともbashクロックが現在の日付を知っていることを前提としていることに注意してください。そうでない場合は、代わりにこれを使用できます。

def what_year_is_it(): return int(subprocess.check_output(["date", "+%yy"]))[:-2];

ただし、少し遅くなる場合があります。私はそれをテストしていません。


5

BrainFuck

>+++++++[-<++++++++>]<---.>+++++[-<+++++>]<++.---.>++++++++[-<-------->]<---.

出力:

5PM

執筆時点のデンバーの時間を表示していると思います。このAlan Jacksonビデオによるアルゴリズムの説明。


xkcd.com/221しかし、時間については、わかりました。
val

@val両者は、実行時に一定になったという特性を共有していますが、歌は正しいです。どこか午後5時です。新しい開発者はマクロ展開時間で計算すると時間を節約できると考えているため、XKCDの問題はよく起こります。
シルウェスター

しかし、それは本当に時間を節約します!実際に結果の実行可能ファイルで。
val

5

ルビー

`date`

言語のクロック/時刻APIを使用しません。


これは正確に何をしますか?
Hosch250 14年

1
シェルで日付コマンドを実行し、出力を返します。
bblack 14年

4

私は「タイムサーバーから読む」というアイデアが好きでした。ただし、フォーマットを改善し、楽しみのためにいくつかの都市を追加しました。

PHP

$page = file_get_contents("http://www.timeapi.org/utc/now");
echo "In London: ".date("H:i:s - jS F, Y", strtotime($page))."<br>";
echo "In Rome: ".date("H:i:s - jS F, Y", strtotime($page)+3600)."<br>";
echo "In Athens: ".date("H:i:s - jS F, Y", strtotime($page)+7200)."<br>";


4

C / WinAPI

これにより、クロックを照会するための独自のAPI呼び出しが壊れていると仮定されますが、システム自体は時刻を正しく処理できます。

// NO ERROR CHECKING - that's left as an exercise for the reader
TCHAR tmpfilename[MAX_PATH];
TCHAR tmpfilepath[MAX_PATH];

// get some information to create a temporary file
DWORD dwRes = GetTempPath(MAX_PATH, tmpfilepath);
UINT uiRes  = GetTempFileName(tmpfilepath, TEXT("golftime"), 0, tmpfilename);

// create the file
HANDLE hTempFile = CreateFile(tmpfilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

// read the creation time of the file. accuracy is to, uhm... 10ms on NTFS?
FILETIME created;
GetFileTime(hTempFile, &created, NULL, NULL);

// convert the filetime to a system time (in UTC)
SYSTEMTIME systime;
FileTimeToSystemTime(&created, &systime);

std::cout << "Time is " <<
    systime.wHour << ":" << systime.wMinute << ":" << systime.wSecond << "." << systime.wMilliseconds << "\n";

// close the file and delete
CloseHandle(hTempFile);
DeleteFile(tmpfilename);

アイデアは、一時ファイルを作成し、作成時間を読み取ることです。NTFSでは、これは10ミリ秒まで正確であると思います。出力のフォーマットは不明瞭ですが、それは純粋に怠け者です。

ちょうど今私のマシンに出力: Time is 10:39:45.790


1
// NO ERROR CHECKING - that's left as an exercise for the reader—実稼働コードではこれを見ない方がいい
wchargin 14年

4

バッチ

@echo off
echo.>>%0
for /f "tokens=2,3 skip=4" %%a in ('dir /TW %0') do echo %%a %%b & goto :EOF

バッチファイル(それ自体)に空白行を書き込み、ファイルの最終書き込み時間を確認します。

H:\uprof>GetTime.bat
09:28 AM

H:\uprof>GetTime.bat
09:29 AM

3

HTML、CSS、Javascript / jQuery

わかりましたので、これは技術的にはプログラムではなく、おそらく基準の範囲外になりますが、わずか数時間で、これは世界で最も正確な時計になります!

CSS

@font-face {
    font-family:"DSDIGI";
    src:url("http://fontsforweb.com/public/fonts/1091/DSDIGI.eot") format("eot"),
    url("http://fontsforweb.com/public/fonts/1091/DSDIGI.ttf") format("truetype");
    font-weight:normal;
    font-style:normal;
}
#backer {
    background-image: url('http://i.imgur.com/w3W5TPd.jpg');
    width: 450px;
    height: 354px;
    color: red;
    font-family: 'DSDIGI';
}
#backer p {
    width: 100%;
    display: block;
    line-height: 325px;
    font-size: 60px;
}

HTML

<div id="backer">
    <p>
        BEER<span id="fade">:</span>30
    </p>
</div>

jQuery

function start() {
    $('#fade').fadeOut(function() {
        $('#fade').fadeIn();
    });
    setTimeout(start, 1000);
}
start();

最初はwhile(true)ループを実行するつもりでしたが、ブラウザをクラッシュさせたくないことを思い出しました...

動作中のフィドルは次のとおりです。http//jsfiddle.net/E7Egu/

ここに画像の説明を入力してください


4
flare_points ++;
scunliffe 14年

2年後、誰かがやって来てこれに反対票を投じることが大好きです。笑
ドライデンロング

3

Emacs Lisp

グーグルのことは行われましたが、emacsではありません!

(url-retrieve "http://www.google.com/search?q=time" (lambda(l)            
        (search-forward-regexp "[0-9]?[0-9]:[0-9][0-9][ap]m")
        (print (buffer-substring (point) (1+ (search-backward ">"))))))

2

node.js / Javascript

var fs = require('fs'),
    util = require('util');

var date = null, time = null;

fs.readFile('/sys/class/rtc/rtc0/date', 'UTF-8', function(err, d) {
    date = d.trim();
    if(time)
        done();
})

fs.readFile('/sys/class/rtc/rtc0/time', 'UTF-8', function(err, t) {
    time = t.trim();
    if(date)
        done();
});

function done() {
    console.log(util.format('%sT%sZ', date, time));
}

1
いくつかの依存関係を逃しました。それはどんなLinuxフレーバーですか?
チャールズチャールズ14年

1
/ sys / class / rtc / rct0ディレクトリに何が欠けていますか?私はArch Linuxを使用しています。
クリス14年

1
はい、それはすべての* nixシステムではなく、すべてのシステムにはありません!
チャールズではない


1

PHP:

 $n=PHP_SHLIB_SUFFIX=='dll'?strtotime(str_replace(PHP_EOL,' ',`date /t&time /t`).' GMT'):`date +%s`;

これにより、使用可能なコマンドラインインターフェイスからシステム時間が読み取られます。

backtick演算子を使用して、コマンドを実行します。

別の方法は次のとおりです。

$_SERVER['REQUEST_TIME'];

スクリプトが呼び出された現在の時刻が含まれます。


それはまだあなた自身のシステムに時間に依存しているのではありませんか?
モーリス14年

2
質問の1行目:「あなたの言語の時計/時刻APIが壊れていて、まったく信頼できないことがわかっています。」これは自分自身を説明すると思います。
イスマエルミゲル14年

1

バッシュ

export PS1="(\t) $PS1"

ルールを少しスカート化しますが、時間関数を呼び出すことはありません。ただし、終了時には現在の時刻が表示され、その後はEnterキーを押すたびにEnterが表示されます。


1

C#

この非常に正確な方法は機能します-プログラムを0:00:00,0000で実行する場合

using System;
using System.Threading;

namespace ConsoleApplication1 {
  class Program {
    private static volatile int s_Hour;
    private static volatile int s_Minute;
    private static volatile int s_Second;
    private static volatile int s_Millisecond;

    class Looper {
      public int Length { get; set; }
      public Action Update { get; set; }
    }

    static void Loop(object args) {
      var looper = (Looper)args;
      while (true) {
        Thread.Sleep(looper.Length);
        looper.Update.Invoke();
      }
    }

    static void Main(string[] args) {
      var starter = new ParameterizedThreadStart(Loop);
      new Thread(starter).Start(new Looper { Length = 100, Update = () => { s_Millisecond = (s_Millisecond + 100) % 1000; } });
      new Thread(starter).Start(new Looper { Length = 1000, Update = () => { s_Second = (s_Second + 1) % 60; } });
      new Thread(starter).Start(new Looper { Length = 60 * 1000, Update = () => { s_Minute = (s_Minute + 1) % 60; } });
      new Thread(starter).Start(new Looper { Length = 60 * 60 * 1000, Update = () => { s_Hour++; } });

      Console.Out.WriteLine(@"Press e to exit, enter to write current time...");
      while (true) {
        string input = Console.In.ReadLine();
        if (input == "e") {
          Environment.Exit(0);
          return;
        }
        Console.Out.WriteLine("{0:00}:{1:00}:{2:00},{3}", s_Hour, s_Minute, s_Second, s_Millisecond);
      }
    }
  }
}

Thread.Sleepは、括弧で指定された最小限の時間だけスレッドがスリープすることを保証します。必要に応じて、ずっと長く眠り続けることができます。
ブライアンベッチャー14年

1

Linux、ほとんどのシェル、RTCを備えたハードウェア:

echo `cat /sys/class/rtc/rtc0/{date,time} | tr "\n" " "`

これは、日付/時刻APIを呼び出しませんか?
Hosch250 14年

エコーサブシェルビットを取得しません。おそらく、単語の分割間隔を正規化したいのですが、もしそうなら、なぜtrビットをするのですか?たぶんあなただけが欲しいpaste -d' ' /sys/class/rtc/rtc0/{date,time}
小次郎14年

RTCがないラズベリーPIでこれを試したらどうなりますか?!
ジョージ

@kojiroはい、あなたの道はきれいです。
trav

1

Java

私たちは皆、Java Date / Time APIが使えず壊れていることを知っています。そのため、既存のAPIを(少なくとも直接)使用しない修正があります。うるう秒もサポートします!:)出力はUTCです。

import java.lang.reflect.Field;
import java.net.HttpCookie;
import java.util.*;

public class FixedTimeAPI4Java {

    private static final List<Integer> MONTHS_WITH_30_DAYS = Arrays.asList(4, 6, 9, 11);
    private static final List<Integer> YEARS_WITH_LEAP_SECOND_IN_DECEMBER = Arrays.asList(1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1987, 1989, 1990, 1995, 1998, 2005, 2008);
    private static final List<Integer> YEARS_WITH_LEAP_SECOND_IN_JUNE =  Arrays.asList(1972, 1981, 1982, 1983, 1985, 1992, 1993, 1994, 1997, 2012);

    /**
    * Returns the UTC time, at the time of method invocation, with millisecond
    * precision, in format <code>yyyy-MM-dd HH:mm:ss.SSS</code>.
    */
    public String getTime() throws Exception {

        // The cookie is only used for accessing current system time
        HttpCookie cookie = new HttpCookie("Offline", "Cookie");
        Field created = HttpCookie.class.getDeclaredField("whenCreated");
        created.setAccessible(true);

        long millisecondsSinceEpoch = created.getLong(cookie);        
        long fullSecondsSinceEpoch = millisecondsSinceEpoch / 1000L; 

        int year = 1970, month = 1, dayOfMonth = 1, hour = 0, minute = 0, second = 0,
            millisecond = (int)(millisecondsSinceEpoch - (fullSecondsSinceEpoch * 1000L));

        ticks: 
        for (;; year++) {
            for (month = 1; month <= 12; month++) {
                for (dayOfMonth = 1; dayOfMonth <= daysInMonth(month, year); dayOfMonth++) {
                    for (hour = 0; hour < 24; hour++) {
                        for (minute = 0; minute < 60; minute++) {
                            for (second = 0; second < secondsInMinute(minute, hour, dayOfMonth, month, year); second++, fullSecondsSinceEpoch--) {
                                if (fullSecondsSinceEpoch == 0) {
                                    break ticks;
                                }
                            }
                        }
                    }
                }
            }
        }
        return String.format("%04d-%02d-%02d %02d:%02d:%02d.%03d", year, month,
            dayOfMonth, hour, minute, second, millisecond);
    }

    /**
     * Returns the seconds in the given minute of the given hour/day/month/year,
     * taking into account leap seconds that can be added to the last minute of
     * June or December.
     */
    private static int secondsInMinute(int minute, int hour, int day, int month, int year) {
        return (minute == 59 && hour == 23 && ((day == 30 && month == 6) || (day == 31 && month == 12))) 
                ? 60 + leapSecondsInMonth( month, year) 
                : 60;
    }

    /**
     * Returns the number of days in the given month of the given year.
     */
    private static int daysInMonth(int month, int year) {
        return month == 2 ? isLeapYear(year) ? 29 : 28
                : MONTHS_WITH_30_DAYS.contains(month) ? 30
                    : 31;
    }

    /** 
     * Returns whether the given year is a leap year or not. 
     * A leap year is every 4th year, but not if the year is divisible by 100, unless if it's divisible by 400.
     */
    private static boolean isLeapYear(int year) {
        return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? true : false;
    }

    /** 
     * Returns the number of leap seconds that were added to UTC time at the end of the given month and year.
     * Leap seconds are added (by the decison of International Earth Rotation Service / Paris Observatory)
     * in order to keep UTC within 0.9 seconds of international atomic time (TAI).
     * <p>TODO: implement parser for updated list at http://www.ietf.org/timezones/data/leap-seconds.list :)
     */
    private static int leapSecondsInMonth(int month, int year) {        
        return (year < 1972 || year > 2012) ? 0
                : (month == 6 && YEARS_WITH_LEAP_SECOND_IN_JUNE.contains(year)) ? 1
                    : (month == 12 && YEARS_WITH_LEAP_SECOND_IN_DECEMBER.contains(year)) ? 1
                        : 0;
    }

    public final static void main(String[] args) throws Exception {
        System.out.println(new FixedTimeAPI4Java().getTime());        
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.