gpt4 book ai didi

windows - 当我将我的 Perl 程序从 Linux 移至 Windows 时,为什么日期和数字格式会发生变化?

转载 作者:可可西里 更新时间:2023-11-01 11:10:11 26 4
gpt4 key购买 nike

我正在将一些脚本从 Linux 机器转移到 Windows 机器,但现在打印的任何数字或日期都失去了格式(即,数字四舍五入到小数点后两位,日期为 2010 年 6 月 1 日......)。

我对 Perl 很陌生,无法弄清楚他们从哪里获得格式的,因为脚本中似乎没有任何内容。

我也一直在 Google 上搜索全局设置和环境变量,但我找不到任何相关的引用资料?

到目前为止,我已经成功地手动添加了数字格式,但我仍然对如何正确设置我的日期格式感到困惑,但这两个似乎都是在其他地方之前完成的..

例子

目前我有这条线:

 $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”列中。数字存储为 float ,保留 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;

我在其他地方得到了答案,因为我完全糊涂了!我没有意识到我必须先解析日期!

最佳答案

因为 strftime 总是定义了格式,我相信您从一些外部来源获取日期(例如,日期未在 perl 脚本中格式化)。

系统实用程序的日期格式由 LC_TIME 环境变量控制。因此,如果您在 perl 脚本中解析某些实用程序的输出,您可能希望首先设置此属性(例如,使其成为系统范围的设置):

# export LC_TIME=de_DE
# date
Mi 6. Okt 14:54:22 CEST 2010
# export LC_TIME=POSIX
# date
Wed Oct 6 14:54:26 CEST 2010

尝试更改控制面板中的设置 → 区域和语言设置。如果它影响日期格式,则您具有依赖于环境的日期格式。然后您需要检查您的数据库客户端:它如何处理从表中获取的日期字段。你从 DBI 得到 $r_detail 吗?

关于windows - 当我将我的 Perl 程序从 Linux 移至 Windows 时,为什么日期和数字格式会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com