| Plucene documentation | Contained in the Plucene distribution. |
Plucene::Document::DateSerializer - Utility functions for dealing with dates
use Plucene::Document::DateSerializer my $field = Plucene::Document::Field->Text( date => freeze_date(Time::Piece $t) ); $doc->add($field);
Dates and times in Plucene should be serialized using the freeze_date
function so that the Plucene::Search::DateFilter can filter on them
during future searches.
my $string = freeze_date(Time::Piece $t)
This routine, exported by default, turns a Time::Piece object into
a string in a format expected by both Plucene and Lucene.
my Time::Piece $t = Plucene::Document::DateSerializer::thaw_date($string)
This routine is not exported, and is not used by the Plucene core. It is
useful for debugging dates, and simply reverses the freeze_date operation.
| Plucene documentation | Contained in the Plucene distribution. |
package Plucene::Document::DateSerializer; use strict; use warnings; use Time::Piece; use base 'Exporter'; our @EXPORT = qw(freeze_date);
sub freeze_date { _to_base_36(shift->epoch * 1000); } sub _to_base_36 { my $number = shift; my $string = ""; while ($number) { my $quot = $number % 36; $string = ($quot < 10 ? $quot : chr($quot + 87)) . $string; $number = int($number / 36); } $string = "0$string" while length($string) < 9; $string; } sub _from_base_36 { my $string = shift; my $exponent = 0; my $number; for (reverse split //, $string) { $number += ($_ =~ /\d/ ? $_ : (ord($_) - 87)) * (36**$exponent++); } return $number; } # Java uses milliseconds, but Perl doesn't have 'em
sub thaw_date { my $self = shift; return Time::Piece->new(_from_base_36($self) / 1000); } 1;