AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[datetime](coding)

Martin Hope
tjwrona
Asked: 2024-12-03 03:30:26 +0800 CST

为什么将 DateTime 截断为“天”会导致我在减去一天时得到错误的结果?

  • 7

给定当前日期,我需要使用 Perl DateTime模块获取昨天的日期。

当天的当前时间并不重要。我只需要昨天的日期,所以我认为我可以在减去一天之前截断当天的时间值。

这看起来应该足够简单,但我最终得到了错误的结果。

use DateTime;
use strict;
use warnings;

my $today = DateTime->now(time_zone => 'local');

# Set time zone to UTC before performing math (see DateTime documentation)
$today->set_time_zone('UTC');
my $yesterday = $today->clone->truncate(to => 'day')->subtract(days => 1);

# Set time zone back to local
$today->set_time_zone('local');
$yesterday->set_time_zone('local');

print "YESTERDAY: ".$yesterday->strftime("%m/%d/%Y")."\n";
print "    TODAY: ".$today->strftime("%m/%d/%Y")."\n";

此代码输出:

YESTERDAY: 11/30/2024
    TODAY: 12/02/2024

请注意,如果我不这样做,->truncate(to => 'day')我似乎会得到正确的结果,但我仍然对截断日期时间会导致结果改变这一事实感到困惑。

有人知道为什么会发生这种情况吗?

datetime
  • 1 个回答
  • 37 Views
Martin Hope
John Beasley
Asked: 2024-11-07 02:42:23 +0800 CST

转换奇怪的日期时间格式

  • 4

在我的一个 MySQL 5.7 表中,有一列具有奇怪的日期时间格式。它看起来像这样:

2024-08-09 20:57:31.4477

我正在尝试使用此查询将其转换为日期格式 m/d/Y。以下是我目前正在尝试的操作:

update table set `column1` = 
CASE column1
    WHEN '' THEN NULL 
    ELSE date_format(str_to_date(`column1`, '%Y-%m-%d %H:%i:%s %P'), '%m/%d/%Y')
END;

但我收到以下错误:

Incorrect datetime value: '2024-08-09 20:57:31.4477' for function str_to_date

当尝试比较日期时间列时,我也使用了这种格式: '%Y-%m-%d %H:%i:%s %p'但我收到了同样的错误。

对于上述日期时间,我应该在 str_to_date 中使用什么格式?

我尝试使用这些格式:

'%Y-%m-%d %H:%i:%s.%P'
'%Y-%m-%d %H:%i:%s.%p'
'%Y-%m-%d %H:%i:%s.%s'

仍然出现同样的错误。

datetime
  • 2 个回答
  • 39 Views
Martin Hope
ohmycloudy
Asked: 2024-09-29 15:13:02 +0800 CST

为什么 DateTime.now 和 Date.today.DateTime 有不同的时区?

  • 7
[23] > my $now = DateTime.now
2024-09-29T14:59:10.178051+08:00
[24] > my $eight-hours-later = Date.today.DateTime.later(:8hours)
2024-09-29T08:00:00Z

[25] > $now - $eight-hours-later
-3649.82194842
[26] > $now.timezone
28800
[27] > $eight-hours-later.timezone
0
[28] > Date.today.DateTime.timezone
0
[29] > $now.WHAT
(DateTime)
[30] $eight-hours-later.WHAT
(DateTime)

在上面的 REPL 中,$now和$eight-hours-later都是DateTime,但是为什么$now时区为28800和$eight-hours-later时区为0,导致时区不同。

我的 Raku 版本是:

Welcome to Rakudo v2024.05.1.
Implementing the Raku Programming Language v6.d.
Built on MoarVM version 2024.05
datetime
  • 1 个回答
  • 40 Views
Martin Hope
Jas Mahay
Asked: 2024-09-02 05:18:13 +0800 CST

使用日期和日历:需要社区帮助来提高工作表的效率

  • 5

我正在处理一张处理商品未来数据(财务数据,几乎像股票数据,但每月的到期日可以延伸到未来两到三年)的工作表。

我的数据有符号、到期日和收盘价,大约有 600 行。例如,每种商品都有一个两个字符的代码;

商品代码/符号

标普 500 E-迷你 ES

纳斯达克 100 E-迷你 NQ

罗素 2000 E-迷你 RTY

道琼斯期货迷你YM

金牌 GC

玉米ZC

大豆ZS

每种商品都有多个月度到期日,最长可达 3 年或更长时间,但我只想使用两年。每个月都有一个字符代码来表示月份,以及年份的最后两位数字。例如,2024 年 1 月编码为“F24”。

月份:一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月

符号:FGHJKMNQUVXZ

准备数据表的懒惰方法(FIXED SHEET): [懒惰的到期日历数据:图像](https://isstatic.askoverflow.dev/nSp9NBQP.png)

在惰性方法四年(48 列“月份”)日历中,表示未来到期月份,在“锚定列 C4”中唯一的动态值是年份。月份列有固定的月份代码,从一月代码“F”开始,依此类推;

   |← Current year - 1 →|← Current year → | ← Current year+1 → |← Current year+2 →|

明显的问题是,例如,当当前月份是八月“Q”时,前8列是空的,而我想在另一张紧凑的表格中显示这个日历的范围,因此空值对表格没有好处!

**动态数据表(动态表):** 要显示 24 个月的数据(~两年),固定列 B1(用于月份)和 B2(用于月份和年份代码),在第一列中将当前月份作为 MONTH(NOW()) 获取,然后在 C1 到 Z1 中计算接下来的 24 个月我使用这个公式;

=MONTH(EOMONTH(NOW(),0)+30+(IF(MOD(B1,2)=1,1,0)))

后续列将 30、60、90、120..天数固定到 B1 列。如果月份有 31 天,则通过公式 IF(MOD(B1,2)=1,1,0) 添加一天

为了对年份和月份代码的最后两位数字进行编码,我在锚列 B2 中使用了此公式;

=CHOOSE(B1,"F","G","H","J","K","M","N","Q","U","V","X","Z") & RIGHT(YEAR(NOW()),2) 然后后续到期列 C2,D2...Z2 计算如下:

=CHOOSE(C1,"F","G","H","J","K","M","N","Q","U","V","X","Z")&RIGHT(YEAR(EOMONTH(NOW(),0)+30+(IF(MOD(A1,2)=1,1,0))),2)

为了自动计算年份,我添加了额外的天数 30,30..720。

要使用 sheet,请进行复制:

https://docs.google.com/spreadsheets/d/1ThGY8cH0zRTQSWM2k7aHCwZrnVpd88gXXS7jgx9Iy2s/edit?usp=sharing

到目前为止,我的应用程序正在运行,我正在用它来交易期货合约,我想知道我是否可以提高性能或效率。

datetime
  • 1 个回答
  • 36 Views
Martin Hope
Sharon
Asked: 2024-08-12 18:46:20 +0800 CST

如何使用 date-fns 以当地时间显示 UTC 时间?

  • 6

我知道以前有人问过这个问题,但是我无法处理时区等问题,所以无法理解。

我的 React 应用目前正在渲染日历,但我在处理时区问题时遇到了困难。事件的日期以 UTC 格式存储,我检索事件列表并渲染它们。我想以用户的本地时间显示每个事件的开始时间,但我无法让它工作。我也安装了date-fns-tz,但它似乎没有做任何不同的事情。

目前,对于每个事件,我都有一个startDateUTC,如下所示:2024-08-27T08:30:00.0000000。

如果我使用它来显示format(startDate, "HH:mm")我得到:(08:30正如预期的那样)。

然而,在我的时区(“欧洲/伦敦”),这个活动实际上将于 9.30(我的时间)开始,这就是我想要显示的。

我可以使用从浏览器获取时区const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;,但我不确定如何使用它来转换和显示时间。

我尝试使用 date-fns-tz 版本的格式:format(startDate, "HH:mm", { timeZone: "Europe/London" })但仍然得到 8:30。

我还尝试过toZonedTime:toZonedTime(startDate, "Europe/London")将 startDate 转换为Tue Aug 27 2024 08:30:00 GMT+0100 (British Summer Time)- 我不确定这是否是正确的时间(英国夏令时比 UTC 早 1 小时,因此是 UTC+1)。无论如何,当我将其打印出来时,它仍然显示为 8:30。

有人能帮助我吗?本质上,我的 UTC 开始日期是 8:30;但是,当活动开始时,我的手表将显示 9:30,所以我想要显示 9:30。

datetime
  • 1 个回答
  • 19 Views
Martin Hope
yelldio
Asked: 2024-08-11 19:47:50 +0800 CST

我无法将 46809654.36 转换为 Google 表格中的日期和时间值

  • 5

我使用了以下公式:

= ArrayFormula(SUM(min(A2:A1294)*(U2:U1294="")))

A列包含时间戳,我得到的结果为“46809654.36”。

我想将其转换为“2020. 5. 1 pm 5:27:01”这样的格式,但它不会改变。我该如何解决这个问题?

datetime
  • 2 个回答
  • 38 Views
Martin Hope
durumdara
Asked: 2024-08-02 21:20:23 +0800 CST

Delphi EncodeDateTime 和 EncodeTime 时间部分不同

  • 6

以下示例演示了该问题:

var
   fdt, fndt : Double;
   dt, dt2 : TDateTime;
begin
    dt := EncodeDateTime(2023, 12, 31, //
        20, 10, 5, 100);
    dt2 := EncodeTime(20, 10, 5, 100);
    fdt := Frac(dt);
    fndt := Frac(dt2);
    Memo1.Lines.Add('Equal: ' + BoolToStr(fdt = fndt, True) + CRLF + //
        FloatToStr(fdt) + CRLF +  //
        FloatToStr(fndt) + CRLF +  //
        FormatDateTime('HH:NN:SS ZZZ', fdt) + CRLF +  //
        FormatDateTime('HH:NN:SS ZZZ', fndt) + CRLF +  //
        ''
        );
    Exit;

结果是:

 Equal: False 
 0,840336805558763 
 0,840336805555556 
 20:10:05 100
 20:10:05 100

因此,正如您所看到的,时间部分与 Double 不同,但与格式化字符串相同。

为什么它们不同?

据我所知,EncodeDateTime 执行的是 EncodeDate + EncodeTime。并且 Date = Trunc(Date)。因此小数部分必须相同!但事实并非如此。为什么?也许是一些时区信息?

感谢您提供关于此的任何信息。

环境:Win 11,Delphi S10,32 位 Exe。时区:欧洲/布达佩斯 (+2/+1)。

datetime
  • 1 个回答
  • 59 Views
Martin Hope
con
Asked: 2024-01-27 02:34:26 +0800 CST

Perl 的日期时间未返回正确的时间差异

  • 7

受https://perlmaven.com/datetime的启发,我试图找到 2024-01-03T19:00:00 和 2024-01-07T16:00:00 (93 小时)之间的差异小时数。

#!/usr/bin/env perl

use 5.038;
use warnings FATAL => 'all';
use autodie ':default';
use DDP;
use Devel::Confess 'color';
use DateTime;

sub str_to_date ($date) {
    if ($date =~ m/^(\d+) # year
    \-(\d{1,2})           # month
    \-(\d{1,2})           # day
    T
    (\d+)                        # hour
    :
    (\d+)                        # minutes
    :
    (\d+)                        # seconds                  
    /x) {
        return DateTime -> new(
        year  => $1,
        month => $2,
        day   => $3,
        hour    => $4,
        minute=> $5,
        second=> $6,
    );
    } else {
        die "$date failed regex.";
    }
} # later dates are "greater"
my $wed_date = str_to_date('2024-01-03T19:00:00');
say $wed_date->day;
my $sun_date = str_to_date('2024-01-07T16:00:00');
my $diff = $sun_date - $wed_date; # returns a duration object

p $diff;
say $diff->clock_duration->in_units('hours'); # 21, but should be 93
say $diff->in_units('hours'); # 21 again
say $diff->hours; # 21 again
say $sun_date->delta_days($wed_date)->in_units('hours'); # 0
p $diff->deltas;

我从https://metacpan.org/pod/DateTime::Format::Duration找到的所有方法都给出了错误的答案。

或者,如果我删除解析,

#!/usr/bin/env perl
use 5.038;
use warnings FATAL => 'all';
use autodie ':default';
use DDP;
use Devel::Confess 'color';
use DateTime;

my $wed_date = DateTime->new(
    year => 2024,
    month=>1,
    day=>3,
    hour=>19
);#str_to_date('2024-01-03T19:00:00');
my $sun_date = DateTime->new(
    year=>2024,
    month=>1,
    day=>7,
    hour=>16#my $sun_date = str_to_date('2024-01-07T16:00:00');
);#
say $wed_date->day;

my $diff = $sun_date - $wed_date;

p $diff;
say $diff->clock_duration->in_units('hours'); # 21, but should be 93
say $diff->in_units('hours'); # 21 again
say $diff->hours; # 21 again
say $sun_date->delta_days($wed_date)->in_units('hours'); # 0
p $diff->deltas; # 10

答案是相同的。

DateTime::Duration 对象似乎忽略了中间的天数,而只关注小时之间的差异。

如何获得两个日期之间正确的小时数?

datetime
  • 2 个回答
  • 57 Views
Martin Hope
John Doe
Asked: 2024-01-02 18:30:47 +0800 CST

如何将 SAS 中的字符时间戳转换为有效的日期时间值

  • 5

我在 SAS 中有两个不同的字符时间戳,需要将它们转换为日期时间 (24H) 值。
实现这一目标的首选方法是什么?

样品1

01-12-2023 09:51 AM
24-08-2023 02:38 PM

期望的输出:

01-12-2023 09:51:00
24-08-2023 14:38:00

我对示例 1 的解决方案(不确定这是否是最好的)

PROC FORMAT;
    picture dmyhms
        . = ' ' 
        other = '%0d-%0m-%0Y %0H:%0M:%0S' (datatype=datetime);
RUN;

INPUT(CATX(" ", SUBSTR(event, 1, 10), SUBSTR(event, 12, 8)),anydtdtm.) FORMAT dmyhms. AS event_dt

样品2

20240112T000000.000 GMT
20230929T000000.000 GMT

期望的输出:

12-01-2024
29-09-2023

我对示例 2 的解决方案(不确定这是否是最好的)

INPUT(SUBSTR(event, 1, 8), yymmdd8.) FORMAT=ddmmyyd10. as event_d

非常感谢任何帮助!

datetime
  • 1 个回答
  • 32 Views
Martin Hope
YannickN.fr
Asked: 2023-10-19 21:10:25 +0800 CST

dataweave 转换 DateTime:无法从 TemporalAccessor 获取 ZonedDateTime

  • 5

在 Dataweave 2.0 中使用此命令:

"08:05:30" as DateTime{format: "hh:mm:ss"} as String {format: "hh:mm:ss"}

我有这个错误:

Unable to obtain ZonedDateTime from TemporalAccessor

怎么解决呢?我的整个问题是转变:

"Wed Oct 18 2023 08:05:30 GMT-0000 (GMT)"

到

"2012-10-11T12:30:40-03:00"

我试过 :

"Wed Oct 18 2023 08:05:30 GMT-0000 (GMT)" as DateTime{format: 'E MMM dd yyyy hh:mm:ss zXX O'} as String {format: "yyyy-MM-dd'T'hh:mm:ssO"}

太感谢了 !

datetime
  • 2 个回答
  • 25 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve