Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit352b368

Browse files
author
Thomas G. Lockhart
committed
Add 'GERMAN' style to date/time output.
Probably have it wrong (dd.mm/yyyy) but can change it when we know. Input routines always handled it.
1 parentd7e0e61 commit352b368

File tree

1 file changed

+143
-174
lines changed
  • src/backend/utils/adt

1 file changed

+143
-174
lines changed

‎src/backend/utils/adt/dt.c

Lines changed: 143 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.44 1997/11/17 16:23:33 thomas Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.45 1997/12/0423:30:52 thomas Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -4099,103 +4099,54 @@ EncodeSpecialDateTime(DateTime dt, char *str)
40994099
int
41004100
EncodeDateOnly(structtm*tm,intstyle,char*str)
41014101
{
4102-
#ifFALSE
4103-
intday;
4104-
4105-
#endif
4106-
41074102
if ((tm->tm_mon<1)|| (tm->tm_mon>12))
41084103
return-1;
41094104

4110-
/* compatible with ISO date formats */
4111-
if (style==USE_ISO_DATES)
4105+
switch (style)
41124106
{
4113-
if (tm->tm_year>0)
4114-
{
4115-
sprintf(str,"%04d-%02d-%02d",
4107+
/* compatible with ISO date formats */
4108+
caseUSE_ISO_DATES:
4109+
if (tm->tm_year>0)
4110+
sprintf(str,"%04d-%02d-%02d",
41164111
tm->tm_year,tm->tm_mon,tm->tm_mday);
4117-
4118-
}
4119-
else
4120-
{
4121-
sprintf(str,"%04d-%02d-%02d %s",
4112+
else
4113+
sprintf(str,"%04d-%02d-%02d %s",
41224114
-(tm->tm_year-1),tm->tm_mon,tm->tm_mday,"BC");
4123-
}
4115+
break;
41244116

41254117
/* compatible with Oracle/Ingres date formats */
4126-
}
4127-
elseif (style==USE_SQL_DATES)
4128-
{
4129-
if (EuroDates)
4130-
{
4131-
sprintf(str,"%02d/%02d",tm->tm_mday,tm->tm_mon);
4132-
}
4133-
else
4134-
{
4135-
sprintf(str,"%02d/%02d",tm->tm_mon,tm->tm_mday);
4136-
}
4137-
if (tm->tm_year>0)
4138-
{
4139-
sprintf((str+5),"/%04d",tm->tm_year);
4140-
4141-
}
4142-
else
4143-
{
4144-
sprintf((str+5),"/%04d %s",-(tm->tm_year-1),"BC");
4145-
}
4146-
4147-
/* backward-compatible with traditional Postgres abstime dates */
4148-
}
4149-
else
4150-
{/* if (style == USE_POSTGRES_DATES) */
4151-
4152-
#ifFALSE
4153-
day=date2j(tm->tm_year,tm->tm_mon,tm->tm_mday);
4154-
#ifdefDATEDEBUG
4155-
printf("EncodeDateOnly- day is %d\n",day);
4156-
#endif
4157-
tm->tm_wday=j2day(day);
4158-
4159-
strncpy(str,days[tm->tm_wday],3);
4160-
strcpy((str+3)," ");
4161-
4162-
if (EuroDates)
4163-
{
4164-
sprintf((str+4),"%02d %3s",tm->tm_mday,months[tm->tm_mon-1]);
4165-
}
4166-
else
4167-
{
4168-
sprintf((str+4),"%3s %02d",months[tm->tm_mon-1],tm->tm_mday);
4169-
}
4170-
if (tm->tm_year>0)
4171-
{
4172-
sprintf((str+10)," %04d",tm->tm_year);
4118+
caseUSE_SQL_DATES:
4119+
if (EuroDates)
4120+
sprintf(str,"%02d/%02d",tm->tm_mday,tm->tm_mon);
4121+
else
4122+
sprintf(str,"%02d/%02d",tm->tm_mon,tm->tm_mday);
4123+
if (tm->tm_year>0)
4124+
sprintf((str+5),"/%04d",tm->tm_year);
4125+
else
4126+
sprintf((str+5),"/%04d %s",-(tm->tm_year-1),"BC");
4127+
break;
41734128

4174-
}
4175-
else
4176-
{
4177-
sprintf((str+10)," %04d %s",-(tm->tm_year-1),"BC");
4178-
}
4179-
#endif
4129+
/* German-style date format */
4130+
caseUSE_GERMAN_DATES:
4131+
sprintf(str,"%02d.%02d",tm->tm_mday,tm->tm_mon);
4132+
if (tm->tm_year>0)
4133+
sprintf((str+5),"/%04d",tm->tm_year);
4134+
else
4135+
sprintf((str+5),"/%04d %s",-(tm->tm_year-1),"BC");
4136+
break;
41804137

41814138
/* traditional date-only style for Postgres */
4182-
if (EuroDates)
4183-
{
4184-
sprintf(str,"%02d-%02d",tm->tm_mday,tm->tm_mon);
4185-
}
4186-
else
4187-
{
4188-
sprintf(str,"%02d-%02d",tm->tm_mon,tm->tm_mday);
4189-
}
4190-
if (tm->tm_year>0)
4191-
{
4192-
sprintf((str+5),"-%04d",tm->tm_year);
4193-
4194-
}
4195-
else
4196-
{
4197-
sprintf((str+5),"-%04d %s",-(tm->tm_year-1),"BC");
4198-
}
4139+
caseUSE_POSTGRES_DATES:
4140+
default:
4141+
if (EuroDates)
4142+
sprintf(str,"%02d-%02d",tm->tm_mday,tm->tm_mon);
4143+
else
4144+
sprintf(str,"%02d-%02d",tm->tm_mon,tm->tm_mday);
4145+
if (tm->tm_year>0)
4146+
sprintf((str+5),"-%04d",tm->tm_year);
4147+
else
4148+
sprintf((str+5),"-%04d %s",-(tm->tm_year-1),"BC");
4149+
break;
41994150
}
42004151

42014152
#ifdefDATEDEBUG
@@ -4232,6 +4183,14 @@ EncodeTimeOnly(struct tm * tm, double fsec, int style, char *str)
42324183

42334184
/* EncodeDateTime()
42344185
* Encode date and time interpreted as local time.
4186+
* Support several date styles:
4187+
* Postgres - day mon hh:mm:ss yyyy tz
4188+
* SQL - mm/dd/yyyy hh:mm:ss.ss tz
4189+
* ISO - yyyy-mm-dd hh:mm:ss+/-tz
4190+
* German - dd.mm/yyyy hh:mm:ss tz
4191+
* Variants (affects order of month and day for Postgres and SQL styles):
4192+
* US - mm/dd/yyyy
4193+
* European - dd/mm/yyyy
42354194
*/
42364195
int
42374196
EncodeDateTime(structtm*tm,doublefsec,int*tzp,char**tzn,intstyle,char*str)
@@ -4261,124 +4220,134 @@ EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, cha
42614220
#endif
42624221
#endif
42634222

4264-
/* compatible with ISO date formats */
4265-
if (style==USE_ISO_DATES)
4223+
switch (style)
42664224
{
4267-
if (tm->tm_year>0)
4268-
{
4269-
sprintf(str,"%04d-%02d-%02d %02d:%02d:",
4270-
tm->tm_year,tm->tm_mon,tm->tm_mday,tm->tm_hour,tm->tm_min);
4271-
sprintf((str+17), ((fsec!=0) ?"%05.2f" :"%02.0f"),sec);
4225+
/* compatible with ISO date formats */
42724226

4273-
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4227+
caseUSE_ISO_DATES:
4228+
if (tm->tm_year>0)
42744229
{
4275-
if (tzp!=NULL)
4276-
{
4277-
hour=-(*tzp /3600);
4278-
min= ((abs(*tzp) /60) %60);
4279-
}
4280-
else
4230+
sprintf(str,"%04d-%02d-%02d %02d:%02d:",
4231+
tm->tm_year,tm->tm_mon,tm->tm_mday,tm->tm_hour,tm->tm_min);
4232+
sprintf((str+17), ((fsec!=0) ?"%05.2f" :"%02.0f"),sec);
4233+
4234+
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
42814235
{
4282-
hour=0;
4283-
min=0;
4236+
if (tzp!=NULL)
4237+
{
4238+
hour=-(*tzp /3600);
4239+
min= ((abs(*tzp) /60) %60);
4240+
}
4241+
else
4242+
{
4243+
hour=0;
4244+
min=0;
4245+
}
4246+
sprintf((str+strlen(str)), ((min!=0) ?"%+03d:%02d" :"%+03d"),hour,min);
42844247
}
4285-
sprintf((str+strlen(str)), ((min!=0) ?"%+03d:%02d" :"%+03d"),hour,min);
4286-
}
42874248

4288-
}
4289-
else
4290-
{
4291-
if (tm->tm_hour||tm->tm_min)
4292-
{
4293-
sprintf(str,"%04d-%02d-%02d %02d:%02d %s",
4294-
-(tm->tm_year-1),tm->tm_mon,tm->tm_mday,tm->tm_hour,tm->tm_min,"BC");
42954249
}
42964250
else
42974251
{
4298-
sprintf(str,"%04d-%02d-%02d %s",
4299-
-(tm->tm_year-1),tm->tm_mon,tm->tm_mday,"BC");
4252+
if (tm->tm_hour||tm->tm_min)
4253+
sprintf(str,"%04d-%02d-%02d %02d:%02d %s",
4254+
-(tm->tm_year-1),tm->tm_mon,tm->tm_mday,tm->tm_hour,tm->tm_min,"BC");
4255+
else
4256+
sprintf(str,"%04d-%02d-%02d %s",
4257+
-(tm->tm_year-1),tm->tm_mon,tm->tm_mday,"BC");
43004258
}
4301-
}
4259+
break;
43024260

43034261
/* compatible with Oracle/Ingres date formats */
4304-
}
4305-
elseif (style==USE_SQL_DATES)
4306-
{
4307-
if (EuroDates)
4308-
{
4309-
sprintf(str,"%02d/%02d",tm->tm_mday,tm->tm_mon);
4310-
}
4311-
else
4312-
{
4313-
sprintf(str,"%02d/%02d",tm->tm_mon,tm->tm_mday);
4314-
}
4315-
if (tm->tm_year>0)
4316-
{
4317-
sprintf((str+5),"/%04d %02d:%02d:%05.2f",
4318-
tm->tm_year,tm->tm_hour,tm->tm_min,sec);
4262+
caseUSE_SQL_DATES:
4263+
if (EuroDates)
4264+
sprintf(str,"%02d/%02d",tm->tm_mday,tm->tm_mon);
4265+
else
4266+
sprintf(str,"%02d/%02d",tm->tm_mon,tm->tm_mday);
43194267

4320-
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4268+
if (tm->tm_year>0)
43214269
{
4322-
strcpy((str+22)," ");
4323-
strcpy((str+23),*tzn);
4270+
sprintf((str+5),"/%04d %02d:%02d:%05.2f",
4271+
tm->tm_year,tm->tm_hour,tm->tm_min,sec);
4272+
4273+
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4274+
{
4275+
strcpy((str+22)," ");
4276+
strcpy((str+23),*tzn);
4277+
}
4278+
43244279
}
4280+
else
4281+
sprintf((str+5),"/%04d %02d:%02d %s",
4282+
-(tm->tm_year-1),tm->tm_hour,tm->tm_min,"BC");
4283+
break;
43254284

4326-
}
4327-
else
4328-
{
4285+
/* German variant on European style; note mixed delimiters dd.mm/yyyy */
4286+
caseUSE_GERMAN_DATES:
4287+
sprintf(str,"%02d.%02d",tm->tm_mday,tm->tm_mon);
4288+
if (tm->tm_year>0)
4289+
{
4290+
sprintf((str+5),"/%04d %02d:%02d:%05.2f",
4291+
tm->tm_year,tm->tm_hour,tm->tm_min,sec);
4292+
4293+
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4294+
{
4295+
strcpy((str+22)," ");
4296+
strcpy((str+23),*tzn);
4297+
}
4298+
4299+
}
4300+
else
43294301
sprintf((str+5),"/%04d %02d:%02d %s",
43304302
-(tm->tm_year-1),tm->tm_hour,tm->tm_min,"BC");
4331-
}
4303+
break;
43324304

43334305
/* backward-compatible with traditional Postgres abstime dates */
4334-
}
4335-
else
4336-
{/* if (style == USE_POSTGRES_DATES) */
4337-
day=date2j(tm->tm_year,tm->tm_mon,tm->tm_mday);
4306+
caseUSE_POSTGRES_DATES:
4307+
default:
4308+
day=date2j(tm->tm_year,tm->tm_mon,tm->tm_mday);
43384309
#ifdefDATEDEBUG
4339-
printf("EncodeDateTime- day is %d\n",day);
4310+
printf("EncodeDateTime- day is %d\n",day);
43404311
#endif
4341-
tm->tm_wday=j2day(day);
4312+
tm->tm_wday=j2day(day);
43424313

4343-
strncpy(str,days[tm->tm_wday],3);
4344-
strcpy((str+3)," ");
4314+
strncpy(str,days[tm->tm_wday],3);
4315+
strcpy((str+3)," ");
43454316

4346-
if (EuroDates)
4347-
{
4348-
sprintf((str+4),"%02d %3s",tm->tm_mday,months[tm->tm_mon-1]);
4349-
}
4350-
else
4351-
{
4352-
sprintf((str+4),"%3s %02d",months[tm->tm_mon-1],tm->tm_mday);
4353-
}
4354-
if (tm->tm_year>0)
4355-
{
4356-
sprintf((str+10)," %02d:%02d",tm->tm_hour,tm->tm_min);
4357-
if (fsec!=0)
4317+
if (EuroDates)
4318+
sprintf((str+4),"%02d %3s",tm->tm_mday,months[tm->tm_mon-1]);
4319+
else
4320+
sprintf((str+4),"%3s %02d",months[tm->tm_mon-1],tm->tm_mday);
4321+
4322+
if (tm->tm_year>0)
43584323
{
4359-
sprintf((str+16),":%05.2f %04d",sec,tm->tm_year);
4360-
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4324+
sprintf((str+10)," %02d:%02d",tm->tm_hour,tm->tm_min);
4325+
if (fsec!=0)
43614326
{
4362-
strcpy((str+27)," ");
4363-
strcpy((str+28),*tzn);
4327+
sprintf((str+16),":%05.2f %04d",sec,tm->tm_year);
4328+
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4329+
{
4330+
strcpy((str+27)," ");
4331+
strcpy((str+28),*tzn);
4332+
}
43644333
}
4365-
}
4366-
else
4367-
{
4368-
sprintf((str+16),":%02.0f %04d",sec,tm->tm_year);
4369-
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4334+
else
43704335
{
4371-
strcpy((str+24)," ");
4372-
strcpy((str+25),*tzn);
4336+
sprintf((str+16),":%02.0f %04d",sec,tm->tm_year);
4337+
if ((*tzn!=NULL)&& (tm->tm_isdst >=0))
4338+
{
4339+
strcpy((str+24)," ");
4340+
strcpy((str+25),*tzn);
4341+
}
43734342
}
4374-
}
43754343

4376-
}
4377-
else
4378-
{
4379-
sprintf((str+10)," %02d:%02d %04d %s",
4344+
}
4345+
else
4346+
{
4347+
sprintf((str+10)," %02d:%02d %04d %s",
43804348
tm->tm_hour,tm->tm_min,-(tm->tm_year-1),"BC");
4381-
}
4349+
}
4350+
break;
43824351
}
43834352

43844353
#ifdefDATEDEBUG

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp