我在解析的一些文件中有奇怪的日期格式。以下是一些示例:這個日期格式叫什麼?我如何解析它?
1954203
2
2010270
前四位數字是年份,接下來的三位數字是一年中的某一天。例如,第一個日期是1954年的第203天,即1954年7月22日。
我的問題是:
- 什麼叫此日期格式?
- 是否有預解析方法?我不想在這裏重新發明輪子。
編輯:對不起,我忘了提及我的語言。 PHP。
我在解析的一些文件中有奇怪的日期格式。以下是一些示例:這個日期格式叫什麼?我如何解析它?
1954203
2
2010270
前四位數字是年份,接下來的三位數字是一年中的某一天。例如,第一個日期是1954年的第203天,即1954年7月22日。
我的問題是:
編輯:對不起,我忘了提及我的語言。 PHP。
嘗試:
$oDate = DateTime::createFromFormat('Yz', 201026);
echo $oDate->format('Y-m-d');
不起作用,因爲'date_parse_from_format()'不能按預期工作。 – 2010-10-27 14:26:49
@Jason它可以在Windows 5.3上的PHP 5.3上正常工作 – 2010-10-27 15:00:59
@Pekka:當然,'date_parse_from_format'在5.3.0之前不存在... – Powerlord 2010-10-27 15:10:36
對於Java,請參閱SimpleDateFormat。你需要yyyyDDD作爲格式(年份,然後是每年的日期)。
假設你得到它在C#中的字符串...
DateTime GetDate(string input)
{
int year = Int32.Parse(input.Substring(0,4));
int day = Int32.Parse(input.Substring(4,3));
return (new DateTime(year,1,1)).AddDays(day - 1);
}
(注-1偏移的日數,因爲你已經開始在第1天)
在PHP格式化日期:
echo date_parse_from_format("Yz", $date);
您還可以使用
DateTime::createFromFormat("YZ", $date);
或它的別名
date_create_from_format("Yz", $date)
它返回一個DateTime對象
你會認爲這會起作用,但事實並非如此。它返回1954年1月204日,並告訴我該日期無效。 – 2010-10-27 14:25:06
@Jason你能展示你使用的完整代碼嗎? – 2010-10-27 15:01:33
'print_r(date_parse_from_format(「Yz」,'1954203'));' – 2010-10-27 15:08:09
原來我想要的東西是這樣的:
$date = '1954203';
$year = substr($date, 0, 4);
$day = substr($date, 4, 3);
$new_date = date("Y-m-d", mktime(1, 1, 1, 1, $day, $year));
Awww,我不確定這是不是一個好主意,因爲它必須使用負面的時間戳。 (Unix時間從1970年1月1日開始)。如果可以的話,使用其中一個'DateTime'建議 – 2010-10-27 14:54:07
好點。我希望我有更好的解決方案。然而,這適用於1902年1月1日或之後的日期,這足以滿足我的目的。 – 2010-10-27 15:13:45
的編程語言? – 2010-10-27 13:58:34
此格式通常稱爲[有序日期](http://en.wikipedia.org/wiki/ISO_8601#Ordinal_dates)。有時候(錯誤地)稱爲[Julian日期](http://en.wikipedia.org/wiki/Julian_day#Julian_Date)。 – 2010-10-27 14:00:49
這種數據格式並不奇怪。根據年份和日期對日期進行排序更容易,而不是處理幾個月(即使它們存儲爲數字)和月份的日期。 – GreenMatt 2010-10-27 15:29:22