当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Delphi/Pascal  » 编程基础
分享到: 
收藏 +0
2
Delphi System.DateUtils Pick-a-field functions部分,其中包含函数YearOf,MonthOf,WeekOf,DayOf,HourOf,MinuteOf,SecondOf,MilliSecondOf
标签: <无>

代码片段(2) [全屏查看所有代码]

1. [代码]UMain.pas-源码     跳至 [1] [2] [全屏预览]

unit UMain;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, system.DateUtils, Data.DB,
  Data.Win.ADODB;

type
  TFMain = class(TForm)
    btnYearOf: TButton;
    MMOResult: TMemo;
    btnMonthOf: TButton;
    btnWeekOf: TButton;
    btnDayOf: TButton;
    btnHourOf: TButton;
    btnMinuteOf: TButton;
    btnSecondOf: TButton;
    btnMilliSecondOf: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnYearOfClick(Sender: TObject);
    procedure btnMonthOfClick(Sender: TObject);
    procedure btnWeekOfClick(Sender: TObject);
    procedure btnDayOfClick(Sender: TObject);
    procedure btnHourOfClick(Sender: TObject);
    procedure btnMinuteOfClick(Sender: TObject);
    procedure btnSecondOfClick(Sender: TObject);
    procedure btnMilliSecondOfClick(Sender: TObject);
  private
    FDateFormatSetting: TFormatSettings;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FMain: TFMain;
  sDate: string = '2015-08-10 14:28:28';

implementation

{$R *.dfm}

procedure TFMain.FormCreate(Sender: TObject);
begin
  //初始化公用的日期格式化参数 此处是为了兼容不同电脑的日期格式
  FDateFormatSetting.ShortDateFormat := 'yyyy-MM-dd';
  FDateFormatSetting.DateSeparator := '-';
  FDateFormatSetting.TimeSeparator := ':';
  //FDateFormatSetting.LongTimeFormat:='hh:mm:ss.zzz';
  FDateFormatSetting.LongTimeFormat := 'hh:mm:ss';
end;

procedure TFMain.btnYearOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //YearOf:返回指定日期参数所在年份
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第712行
  {
  function YearOf(const AValue: TDateTime): Word;
  var
    LMonth, LDay: Word;
  begin
    //DecodeDate函数定义在System.SysUtils第18766行
    //是再次调用了DecodeDateFully,定义在System.SysUtils第18705行
    //该函数是把传入的日期参数拆分成年月日,并直接修改传入的参数值
    //因为YearOf是只需要年份的,所以这里也只把Result当做DecodeDate的年份参数传进去
    //而月份和天只是为了通过编译而定义了两个局部变量
    //DecodeDate函数说复杂也复杂,说简单也简单,以后有机会单独说说该函数
    DecodeDate(AValue, Result, LMonth, LDay);
  end;
  }
  MMOResult.Lines.Add('(YearOf)日期参数[' + sDate + ']年份部分:' + IntToStr(YearOf(dBefore)));
end;

procedure TFMain.btnMonthOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //MonthOf:返回指定日期参数所在月份
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第719行
  {
  function MonthOf(const AValue: TDateTime): Word;
  var
    LYear, LDay: Word;
  begin
    //这里请参照YearOf的说明,只不过把局部变量换成了LYear和LDay,Result当做月份传入DecodeDate
    DecodeDate(AValue, LYear, Result, LDay);
  end;
  }
  MMOResult.Lines.Add('(MonthOf)日期参数[' + sDate + ']月份部分:' + IntToStr(MonthOf(dBefore)));
end;

procedure TFMain.btnWeekOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //WeekOf:返回指定日期参数所属本年度星期数
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第726行
  {
  function WeekOf(const AValue: TDateTime): Word;
  begin
    //WeekOfTheYear定义在System.DateUtils第868行,传入日期参数,返回参数所在星期
    //这个函数又再次调用了DecodeDateWeek函数,在System.DateUtils第1311行
    //判断挺多的,刚简单看了下没有理解透彻,到这个函数的时候再详细了解一下
    Result := WeekOfTheYear(AValue);
  end;
  }
  MMOResult.Lines.Add('(WeekOf)日期参数[' + sDate + ']在本年度星期:' + IntToStr(WeekOf(dBefore)));
end;

procedure TFMain.btnDayOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //DayOf:返回指定日期参数在年内的哪一天
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第731行
  {
  function DayOf(const AValue: TDateTime): Word;
  var
    LYear, LMonth: Word;
  begin
    //下面这个函数是返回了DecodeDateFully的调用,在System.SysUtils第18705行
    //把指定日期拆分成年月日,这里不再详解
    DecodeDate(AValue, LYear, LMonth, Result);
  end;
  }
  MMOResult.Lines.Add('(DayOf)日期参数[' + sDate + ']天数部分:' + IntToStr(DayOf(dBefore)));
end;

procedure TFMain.btnHourOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //HourOf:返回指定日期参数的小时部分
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第738行
  {
  function HourOf(const AValue: TDateTime): Word;
  var
    LMinute, LSecond, LMilliSecond: Word;
  begin
    //下面的函数也是通过拆分日期的各个部分以达到返回日期参数内指定部分值
    DecodeTime(AValue, Result, LMinute, LSecond, LMilliSecond);
  end;
  }
  MMOResult.Lines.Add('(HourOf)日期参数[' + sDate + ']小时部分:' + IntToStr(HourOf(dBefore)));
end;

procedure TFMain.btnMinuteOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //MinuteOf:返回指定日期参数的分钟部分
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第745行
  {
  function MinuteOf(const AValue: TDateTime): Word;
  var
    LHour, LSecond, LMilliSecond: Word;
  begin
    //与HourOf一致,只不过传递的Result位置不同,所以返回值也不同
    DecodeTime(AValue, LHour, Result, LSecond, LMilliSecond);
  end;
  }
  MMOResult.Lines.Add('(MinuteOf)日期参数[' + sDate + ']分钟部分:' + IntToStr(MinuteOf(dBefore)));
end;

procedure TFMain.btnSecondOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //SecondOf:返回指定日期参数的秒部分
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第752行
  {
  function SecondOf(const AValue: TDateTime): Word;
  var
    LHour, LMinute, LMilliSecond: Word;
  begin
    //与HourOf一致,不再累述
    DecodeTime(AValue, LHour, LMinute, Result, LMilliSecond);
  end;
  }
  MMOResult.Lines.Add('(SecondOf)日期参数[' + sDate + ']秒部分:' + IntToStr(SecondOf(dBefore)));
end;

procedure TFMain.btnMilliSecondOfClick(Sender: TObject);
var
  dBefore: TDateTime;
begin
  //MilliSecondOf:返回指定日期参数的毫秒部分
  dBefore := StrToDateTime(sDate, FDateFormatSetting);
  //该函数定义在System.DateUtils第759行
  {
  function MilliSecondOf(const AValue: TDateTime): Word;
  var
    LHour, LMinute, LSecond: Word;
  begin
    //与HourOf一致,因为DecodeTime函数可以解析小时\分钟\秒钟\毫秒,这四个时间部分
    //所以通过改变参数位置即可达到返回不同部分值的效果
    DecodeTime(AValue, LHour, LMinute, LSecond, Result);
  end;
  }
  MMOResult.Lines.Add('(MilliSecondOf)日期参数[' + sDate + ']秒部分:' + IntToStr(MilliSecondOf(dBefore)));
end;

end.

2. [代码]UMain.dfm-窗体文件     跳至 [1] [2] [全屏预览]

object FMain: TFMain
  Left = 0
  Top = 0
  Caption = 'Pick-a-field functions'
  ClientHeight = 586
  ClientWidth = 527
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object btnYearOf: TButton
    Left = 375
    Top = 8
    Width = 123
    Height = 25
    Caption = 'YearOf'
    TabOrder = 0
    OnClick = btnYearOfClick
  end
  object MMOResult: TMemo
    Left = 32
    Top = 8
    Width = 337
    Height = 576
    TabOrder = 1
  end
  object btnMonthOf: TButton
    Left = 375
    Top = 37
    Width = 123
    Height = 25
    Caption = 'MonthOf'
    TabOrder = 2
    OnClick = btnMonthOfClick
  end
  object btnWeekOf: TButton
    Left = 375
    Top = 66
    Width = 123
    Height = 25
    Caption = 'WeekOf'
    TabOrder = 3
    OnClick = btnWeekOfClick
  end
  object btnDayOf: TButton
    Left = 375
    Top = 95
    Width = 123
    Height = 25
    Caption = 'DayOf'
    TabOrder = 4
    OnClick = btnDayOfClick
  end
  object btnHourOf: TButton
    Left = 375
    Top = 124
    Width = 123
    Height = 25
    Caption = 'HourOf'
    TabOrder = 5
    OnClick = btnHourOfClick
  end
  object btnMinuteOf: TButton
    Left = 375
    Top = 153
    Width = 123
    Height = 25
    Caption = 'MinuteOf'
    TabOrder = 6
    OnClick = btnMinuteOfClick
  end
  object btnSecondOf: TButton
    Left = 375
    Top = 182
    Width = 123
    Height = 25
    Caption = 'SecondOf'
    TabOrder = 7
    OnClick = btnSecondOfClick
  end
  object btnMilliSecondOf: TButton
    Left = 375
    Top = 211
    Width = 123
    Height = 25
    Caption = 'MilliSecondOf'
    TabOrder = 8
    OnClick = btnMilliSecondOfClick
  end
end


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(5)

  • 1楼:土卫十六 发表于 2015-08-19 20:49 回复此评论
    受不了,没有一个是你自己实现的函数,你写这个东西干什么?
  • 2楼:土卫十六 发表于 2015-08-19 20:49 回复此评论
    受不了,没有一个是你自己实现的函数,你写这个东西干什么?
  • 3楼:张乐1024 发表于 2015-09-20 06:13 回复此评论

    引用来自“朝闻道”的评论

    受不了,没有一个是你自己实现的函数,你写这个东西干什么?
    亲,是理解思路哦!!!我写这些只是想看看别人遇到问题都是怎样实现的,并且还可以了解到都提供了哪些系统函数,哪怕有个印象在需要的时候也不需要重写了呀!!!
  • 4楼:土卫十六 发表于 2015-09-20 20:20 回复此评论

    引用来自“朝闻道”的评论

    受不了,没有一个是你自己实现的函数,你写这个东西干什么?

    引用来自“张乐1024”的评论

    亲,是理解思路哦!!!我写这些只是想看看别人遇到问题都是怎样实现的,并且还可以了解到都提供了哪些系统函数,哪怕有个印象在需要的时候也不需要重写了呀!!!
    说的有道理,这种文章我也写了一大堆,是在cnblogs上写的,但都没有出现在博客的首页,因为毕竟是没什么技术含量的学习文章。你也可以这样。
  • 5楼:张乐1024 发表于 2015-09-20 21:22 回复此评论

    引用来自“朝闻道”的评论

    受不了,没有一个是你自己实现的函数,你写这个东西干什么?

    引用来自“张乐1024”的评论

    亲,是理解思路哦!!!我写这些只是想看看别人遇到问题都是怎样实现的,并且还可以了解到都提供了哪些系统函数,哪怕有个印象在需要的时候也不需要重写了呀!!!

    引用来自“朝闻道”的评论

    说的有道理,这种文章我也写了一大堆,是在cnblogs上写的,但都没有出现在博客的首页,因为毕竟是没什么技术含量的学习文章。你也可以这样。
    好的,我会考虑的!!!