38
38
universal_time_to_date_and_time/1,
39
39
local_time_to_date_and_time_dst/1,
40
40
date_and_time_to_universal_time_dst/1,
41
validate_date_and_time/1,
42
date_and_time_to_string/1,
41
validate_date_and_time/1, validate_date_and_time/2,
42
date_and_time_to_string/1, date_and_time_to_string/2,
43
date_and_time_to_string2/1,
624
625
short_time({{Y,M,D},{H,Mi,S}}) ->
625
626
[y1(Y), y2(Y), M, D, H, Mi, S, 0].
628
%% This function will only be called if there has been some
629
%% validation error, and as it is strict, it allways returns
631
strict_validation(_What, _Data) ->
634
kiribati_validation(diff, Diff) ->
635
check_kiribati_diff(Diff);
636
kiribati_validation(_What, _Data) ->
639
check_kiribati_diff([$+, H, M])
640
when ((0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60)) orelse
641
((H =:= 14) andalso (M =:= 0)) ->
643
check_kiribati_diff([$-, H, M])
644
when ((0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60)) orelse
645
((H =:= 14) andalso (M =:= 0)) ->
647
check_kiribati_diff(_) ->
651
date_and_time_to_string2(DAT) ->
652
Validate = fun(What, Data) -> kiribati_validation(What, Data) end,
653
date_and_time_to_string(DAT, Validate).
627
655
date_and_time_to_string(DAT) ->
628
case validate_date_and_time(DAT) of
656
Validate = fun(What, Data) -> strict_validation(What, Data) end,
657
date_and_time_to_string(DAT, Validate).
658
date_and_time_to_string(DAT, Validate) when is_function(Validate) ->
659
case validate_date_and_time(DAT, Validate) of
685
716
[calendar:gregorian_seconds_to_datetime(UTCSecs)].
688
validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff])
689
when 0 =< Y1, 0 =< Y2,
691
0 < D, D < 32, 0 =< H,
696
case check_diff(Diff) of
719
validate_date_and_time(DateAndTime) ->
720
Validate = fun(What, Data) -> strict_validation(What, Data) end,
721
validate_date_and_time(DateAndTime, Validate).
723
validate_date_and_time(DateAndTime, Validate) when is_function(Validate) ->
724
do_validate_date_and_time(DateAndTime, Validate).
726
do_validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff], Validate)
727
when ((0 =< Y1) andalso (0 =< Y2)) andalso
728
((0 < Mo) andalso (Mo < 13)) andalso
729
((0 < D) andalso (D < 32) andalso (0 =< H)) andalso
731
((0 =< M) andalso (M < 60)) andalso
732
((0 =< S) andalso (S < 61)) andalso
733
((0 =< Ds) andalso (Ds < 10)) ->
734
case check_diff(Diff, Validate) of
698
calendar:valid_date(y(Y1,Y2), Mo, D);
737
case calendar:valid_date(Year, Mo, D) of
741
Validate(valid_date, {Year, Mo, D})
702
validate_date_and_time(_) -> false.
746
do_validate_date_and_time([Y1,Y2, Mo, D, H, M, S, Ds | Diff], Validate) ->
748
Validate(year, {Y1, Y2}) andalso
749
Validate(month, Mo) andalso
750
Validate(day, D) andalso
751
Validate(hour, H) andalso
752
Validate(minute, M) andalso
753
Validate(seconds, S) andalso
754
Validate(deci_seconds, Ds),
757
case check_diff(Diff, Validate) of
760
case calendar:valid_date(Year, Mo, D) of
764
Validate(valid_date, {Year, Mo, D})
772
do_validate_date_and_time(_, _) ->
704
775
%% OTP-4206 (now according to RFC-2579)
705
check_diff([]) -> true;
706
check_diff([$+, H, M]) when 0 =< H, H < 14, 0 =< M, M < 60 -> true;
707
check_diff([$-, H, M]) when 0 =< H, H < 14, 0 =< M, M < 60 -> true;
708
check_diff(_) -> false.
778
check_diff([$+, H, M], _)
779
when (0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60) ->
781
check_diff([$-, H, M], _)
782
when (0 =< H) andalso (H < 14) andalso (0 =< M) andalso (M < 60) ->
784
check_diff(Diff, Validate) ->
785
Validate(diff, Diff).
711
788
%%-----------------------------------------------------------------