On 4/18/2011 1:49 AM, Xiao Yafeng wrote: > Hi, > Is there a way to create a date type of vbs in perl? > > for example, > how can I translate below vbs statement into perlish > one? > > date_from = DateSerial(2011,03, 23) + timeserial(6, 0, 0) > > any reply is really appreciated.
Windows has more than one time format, so it could get complicated if you plan on doing anything wild with it. file time is a dbl-word (64 bit) in 100-nanosecond intvls since Jan 1, 1601 system time is array of (YR, MON, DOW, HR, MIN, SEC, MSEC) similar to @tm You also have to worry about where the time is from (local/UTC/etc). What we don't know is what happens to date_from farther down to know what to put in there - you would need to indicate that for a proper response. The stuff below assumes you can modify that to use a @tm structure to do what you need with it. In your case, you only have human kinda times (year, month, day, hr, min, sec), so it's a simple matter to plunk the data into a @tm structure and do what you want with it. Just subtract 1900 from the year and 1 from the month and you're ready to go. @tm = (<sec>, <min>, <hr>, <mday>, <mon>, <year>, <wday>, <yday>, <dst>); # , [<TZO>]); @tm = (0, 0, 6, 23, 2, 111, 0, 0, 0); I sometimes add an extra 10th element where I store the TZO (timezone offset). I compute DST and TZO to help convert from/to UTC/local. # I'm in California, so I set my local TZ just in case: $ENV{TZ} = 'PST8PDT' if not exists $ENV{TZ}; my $now = time; # current time (UTC) my @ltm = localtime $now; # current local time @tm my @gtm = gmtime $now; # current UTC time @tm my $DST = $ltm[8]; # is daylight savings time ? my $gnow = timegm (@gtm); # convert UTC @tm to epoch time my $lnow = timegm (@ltm); # convert local @tm to epoch time my $TZO = $lnow - $gnow; # diff in secs between UTC and local # which can be converted to hrs/mins you can convert it to epoch time for comparison/arithmetic and then you have the usual formatting and conversion routines gmtime/localtime/timegm/timelocal/strftime etc. Your local @tm converted to epoch time using timelocal @tm => 1300885200; Then you can use epoch time for calculations. Then you could use the @tm structure to display your time: my $TZ = $TZO / 3600; # convert TZO to hrs for display print strftime ("%a, %d %b %Y %H:%M:%S $TZ\n", @tm[0..8]); _______________________________________________ ActivePerl mailing list ActivePerl@listserv.ActiveState.com To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs