【发布时间】:2010-10-07 21:38:45
【问题描述】:
我正在将一些脚本从 Linux 机器移动到 Windows 机器,但现在打印的任何数字或日期都失去了格式(即,数字四舍五入到小数点后 2 位,日期为 2010 年 6 月 1 日..)。
我对 Perl 很陌生,无法弄清楚他们从哪里获得格式,因为脚本中似乎没有任何内容。
我也一直在谷歌搜索全局设置和环境变量,但我找不到任何可以这样做的参考?
到目前为止,我已经设法手动添加数字格式,但仍然对如何正确设置日期格式感到有些困惑,但这两项似乎在以前的其他地方已经完成..
示例
目前我有这条线:
$text->text("$r_detail->{distance}");
其中"$r_detail->{distance}") 是一个数字,它来自数据库,我使用sprintf('%.1f',$r_detail->{distance}) 对其进行格式化。
现在是12.0988790,格式化后是12.10
日期也来自数据库,它使用的行类似于:
&wh($th,$td,$hrow,30,"SurveyDate:","$r_survey->{sdate}");
我根本不知道如何格式化。
日期现在看起来像:!2003-06-23 09:40:00!
之前他们是!Jun 23 2002 09:40AM!
(它在最后创建一个 PDF)
数据库详情和可能的结论
日期以以下格式存储在数据库中:'2003-06-23 09:40:00' 它们位于“smalldatetime”列中。
这些数字存储为浮点数,保留 1 或 2 位小数。即 2.10 或 15.8
如下所示(我还记得它最初是使用 DBD::Sybase 连接到数据库,但我不得不将其更改为 DBI)是数据库连接改变了我的格式。
我最终如何格式化日期
use Date::Parse;
use POSIX;
my $date ="2002-03-18 10:05:00";
my $parsedDate = str2time($date);
my $formattedDate=strftime "%d %b %Y %I:%M%p", localtime $parsedDate;
我在其他地方得到了答案,因为我完全糊涂了! 我没有意识到我必须先解析日期!
【问题讨论】:
-
@daxim 哇,这还不如 RTFM 有用。
-
嗯....这对我有帮助吗???!!!
-
是的,它应该可以帮助您理解,如果您希望得到有用的答案,您应该发布一些相关的源代码(只说“第 17 行”既不好也不礼貌,但它很简洁)。
-
@Bex “第 17 行”的想法是,您应该通过滥用学习,如果没有代码示例,就不可能回答这样的问题。我认为有更好的方式告诉你(我在下面的回答中尝试这样做)。