2010-10-27 77 views
0

我在解析的一些文件中有奇怪的日期格式。以下是一些示例:这个日期格式叫什么?我如何解析它?

1954203 
2
2010270 

前四位数字是年份,接下来的三位数字是一年中的某一天。例如,第一个日期是1954年的第203天,即1954年7月22日。

我的问题是:

  1. 什么叫此日期格式?
  2. 是否有预解析方法?我不想在这里重新发明轮子。

编辑:对不起,我忘了提及我的语言。 PHP。

+2

的编程语言? – 2010-10-27 13:58:34

+4

此格式通常称为[有序日期](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

+0

这种数据格式并不奇怪。根据年份和日期对日期进行排序更容易,而不是处理几个月(即使它们存储为数字)和月份的日期。 – GreenMatt 2010-10-27 15:29:22

回答

2

尝试:

$oDate = DateTime::createFromFormat('Yz', 201026); 
echo $oDate->format('Y-m-d'); 
+0

不起作用,因为'date_parse_from_format()'不能按预期工作。 – 2010-10-27 14:26:49

+0

@Jason它可以在Windows 5.3上的PHP 5.3上正常工作 – 2010-10-27 15:00:59

+0

@Pekka:当然,'date_parse_from_format'在5.3.0之前不存在... – Powerlord 2010-10-27 15:10:36

0

对于Java,请参阅SimpleDateFormat。你需要yyyyDDD作为格式(年份,然后是每年的日期)。

0

假设你得到它在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天)

0

在PHP格式化日期:

echo date_parse_from_format("Yz", $date); 

您还可以使用

DateTime::createFromFormat("YZ", $date); 

或它的别名

date_create_from_format("Yz", $date) 

它返回一个DateTime对象

+0

你会认为这会起作用,但事实并非如此。它返回1954年1月204日,并告诉我该日期无效。 – 2010-10-27 14:25:06

+0

@Jason你能展示你使用的完整代码吗? – 2010-10-27 15:01:33

+0

'print_r(date_parse_from_format(“Yz”,'1954203'));' – 2010-10-27 15:08:09

0

原来我想要的东西是这样的:

$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)); 
+0

Awww,我不确定这是不是一个好主意,因为它必须使用负面的时间戳。 (Unix时间从1970年1月1日开始)。如果可以的话,使用其中一个'DateTime'建议 – 2010-10-27 14:54:07

+0

好点。我希望我有更好的解决方案。然而,这适用于1902年1月1日或之后的日期,这足以满足我的目的。 – 2010-10-27 15:13:45