Schrift
[thread]6882[/thread]

datum konvertierung: unix format in human format



<< >> 6 Einträge, 1 Seite
misterx
 2005-04-10 22:26
#53688 #53688
User since
2005-03-28
23 Artikel
BenutzerIn
[default_avatar]
hallo, mein problem ist:
ich habe zwei dateien file1.txt und file2 txt.
Die file1.txt sieht wie folgt aus:

Code: (dl )
1
2
1113193722 user 127.0.0.1 1113193718 55555
1113193722 keins 127.0.0.1 1113193718 66666

usw..

also hat folgenden Aufbau: erste Spalte ist ein zeitstempel, zweite das password, dritte die ip, die VIERTE (zeitstempel), fünfte process -id.
Die Datei hat z.B. 300 Einträge.

file2.txt hat folgenden Aufbau:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
===========================
time:Mo Apr 20 12:50:33 2005
ip: 127.0.0.1
password: test

<body>
irgasdklgj
asvlkasjdv
slakdfj
============================
time: Tue Apr 21 11:50:33 2005
ip: 127.0.0.1
password: password2

asvklhaskdjvhasdv
sdvasdvasdvsdv
============================
time: Tue Apr 21 11:50:33 2005
ip: 127.0.0.1
password: password2

asvklhaskdjvhasdv
sdvasdvasdvsdv


Jetzt möchte ich beide Dateien einlesen (also in ein array abspeichern), und vergleichen, ob die VIERTE Spalte aus file1.txt (unixtimestamp) samt ip gleich ist der ip in file2.txt UND dem Zeitstempel, der aber in der Notation z.b. Tue Apr 21 11:50:33 2005 ist.
Es sind in beiden .txt immer die gleichen ips, nur anhand der Zeitstempel kann man die unterscheiden.
Wie konvertiere ich den unix-timestamp in einen der Form aus file2.txt, und vergleiche, ob sie übereinstimmen?

Danke für die Antwort!
format_c
 2005-04-10 23:26
#53689 #53689
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
perldoc -f localtime
perldoc Date::Calc

Eigentlich bin ich kein Fan von RTFM. Aber du stellst nicht wirklich eine Frage weil du etwas wissen möchtest sondern weil wir dir ein Programm schreiben sollen. Zumindest kommt es so an bei mir. Wir wollen dir gerne dabei helfen Perl zu lernen. Wenn wir jedoch für dich die sache scheiben lernst du nicht wirklich etwas.

Hast du schon einen Ansatz bei dem wir dir vielleicht weiter helfen können? Code Schnipsel?

Gruß Alex
misterx
 2005-04-11 10:52
#53690 #53690
User since
2005-03-28
23 Artikel
BenutzerIn
[default_avatar]
Hallo,
habe es vergessen zu posten. Habe natürlich zuerst selber versucht, es hinzubekommen.
Hier mein codeschnipsel:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub date
{
my ($date) = @_;
my ($y, $m, $d);
($y,$m,$d) = ($date =~ /^(\d{4})(\d{2})(\d{2})$/)
or
($y,$m,$d) = ($date =~ /^(\d{4})-(\d{1,2})-(\d{1,2})$/)
or
($d,$m,$y) = ($date =~ /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/)
or
($m,$d,$y) = ($date =~ m#^(\d{1,2})/(\d{1,2})/(\d{4})$#)
or
fehler "falsches Format";
return timegm(0,0,0, $d,$m-1,$y-1900);
}

Macht aber nicht ganz das, was ich brauche. Danke für Hinweise! Grüsse
renee
 2005-04-11 11:16
#53691 #53691
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Lesbar -> Timestamp:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#! /usr/bin/perl

use strict;
use warnings;
use Time::Local;

my $string = 'time: Tue Apr 21 11:50:33 2005';
my $timestamp = get_time($string);
print $timestamp,"\n";

sub get_time{
 my ($string) = @_;
 my %months = (Jan => 0, Feb => 1, Mar => 2, Apr => 3,
               May => 4, Jun => 5, Jul => 6, Aug => 7,
               Sep => 8, Oct => 9, Nov => 10,Dec => 11,);

 my (undef,undef,undef,$mon,$day,$hr,$min,$sec,$year) = split(/[:\s]/,$string);
 my $time = timelocal($sec,$min,$hr,$day,$months{$mon},$year-1900);
 return $time;
}


Timestamp -> lesbar:

Code: (dl )
1
2
3
my $timestamp = '1114077033';
my $readable = localtime($timestamp);
print $readable,"\n";


edit: Vergleich bekommst Du beim timestamp->lesbar mit Datum1 eq Datum2 hin, bei lesbar->timestamp mit Time1 == Time2.\n\n

<!--EDIT|renee|1113204106-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pKai
 2005-04-11 13:25
#53692 #53692
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Ich würde
perldoc Date::Parse
die sub str2time auf die Datumszeichenketten von file2 anwenden, um einen Zeitstempel zum Vergleich zu erhalten.
(Ersetzt annähernd Renees sub get_time; ohne "time:"-Präfix)
I sense a soul in search of answers.
misterx
 2005-04-11 13:45
#53693 #53693
User since
2005-03-28
23 Artikel
BenutzerIn
[default_avatar]
Bin grade dabei, Danke! Werde gleich mehr wissen.
Grüsse
<< >> 6 Einträge, 1 Seite



View all threads created 2005-04-10 22:26.