الاسم
- Provided by: manpages-ar-dev (Version: 4.31.0-1)
- Source: manpages-l10n
- Report a bug
مكتبة سي المعيارية (libc، -lc)
#include <time.h>
size_t strftime(size_t max;
char s[restrict max], size_t max,
const char *restrict format,
const struct tm *restrict tm);
size_t strftime_l(size_t max;
char s[restrict max], size_t max,
const char *restrict format,
const struct tm *restrict tm,
locale_t locale);
الدالة strftime() تُنسّق الوقت المفصل tm وفقًا لمواصفات التنسيق format وتضع النتيجة في مصفوفة المحارف s بحجم max. بنية الوقت المفصل tm مُعرّفة في <time.h>. انظر أيضًا ctime(3).
مواصفات التنسيق هي سلسلة محارف منتهية بقيمة خالية وقد تحتوي على تسلسلات محارف خاصة تُسمى مواصفات التحويل، كل منها يُقدّم بحرف '%' ويُنهى بحرف آخر يُعرف باسم حرف محدد التحويل. جميع تسلسلات المحارف الأخرى هي تسلسلات محارف عادية.
محارف تسلسلات المحارف العادية (بما في ذلك البايت الخالي) تُنسخ حرفيًا من format إلى s. ومع ذلك، محارف مواصفات التحويل تُستبدل كما هو موضح في القائمة أدناه. في هذه القائمة، الحقل (الحقول) المستخدم من بنية tm يُعرض أيضًا.
يمكن تعديل بعض مواصفات التحويل بوضع المُعدِّل E أو O المُعدِّل قبل حرف محدد التحويل للإشارة إلى استخدام تنسيق بديل. إذا لم يكن التنسيق أو المواصفات البديلة موجودة للإعدادات المحلية الحالية، سيكون السلوك كما لو تم استخدام مواصفات التحويل غير المعدلة. (SU) تذكر مواصفات UNIX الموحدة %Ec و %EC و %Ex و %EX و %Ey و %EY و %Od و %Oe و %OH و %OI و %Om و %OM و %OS و %Ou و %OU و %OV و %Ow و %OW و %Oy، حيث تأثير المُعدِّل O هو استخدام رموز عددية بديلة (مثل الأرقام الرومانية)، وتأثير المُعدِّل E هو استخدام تمثيل بديل يعتمد على الإعدادات المحلية. يمكن الحصول على القواعد التي تحكم تمثيل التاريخ مع المُعدِّل E بتزويد ERA كمعامل لـ nl_langinfo(3). أحد الأمثلة على هذه الأشكال البديلة هو نظام التقويم الياباني في الإعدادات المحلية ja_JP في glibc.
strftime_l() مكافئ لـ strftime()، باستثناء أنه يستخدم الإعدادات المحلية المحددة بدلاً من الإعدادات المحلية الحالية. السلوك غير محدد إذا كانت الإعدادات المحلية غير صالحة أو LC_GLOBAL_LOCALE.
بشرط ألا تتجاوز سلسلة المحارف الناتجة، بما في ذلك البايت الفارغ الختامي، max بايت، تُرجع strftime() عدد البايتات (باستثناء البايت الفارغ الختامي) الموضوعة في المصفوفة s. إذا تجاوز طول سلسلة المحارف الناتجة (بما في ذلك البايت الفارغ الختامي) max بايت، فتُرجع strftime() 0، وتكون محتويات المصفوفة غير محددة.
لاحظ أن قيمة الإرجاع 0 لا تشير بالضرورة إلى خطأ. على سبيل المثال، في العديد من الإعدادات المحلية يُنتج %p سلسلة محارف فارغة. سلسلة محارف التنسيق الفارغة ستُنتج بالمثل سلسلة محارف فارغة.
تُستخدم متغيرات البيئة TZ و LC_TIME.
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
| الواجهة | السمة | القيمة |
| strftime(), strftime_l() | سلامة الخيوط | بيئة محلية آمنة لتعدد الخيوط (MT-Safe) |
توجد تضمينات صارمة بين مجموعة التحويلات المعطاة في ANSI C (غير موسومة)، وتلك المعطاة في مواصفات UNIX الموحدة (موسومة SU)، وتلك المعطاة في حزمة المنطقة الزمنية لأولسون (موسومة TZ)، وتلك المعطاة في glibc (موسومة GNU)، باستثناء أن %+ غير مدعوم في glibc2. من ناحية أخرى، لدى glibc2 عدة امتدادات إضافية. يشير POSIX.1 فقط إلى ANSI C؛ يصف POSIX.2 تحت date(1) عدة امتدادات يمكن تطبيقها على strftime() أيضًا. تحويل %F موجود في C99 وPOSIX.1-2001.
في SUSv2، سمح محدد %S بنطاق من 00 إلى 61، للسماح بالاحتمال النظري لدقيقة تتضمن ثانية كبيسة مزدوجة (لم توجد مثل هذه الدقيقة أبدًا).
تُنتج %G و %g و %V قيمًا محسوبة من السنة القائمة على الأسبوع المُعرَّفة بمعيار ISO 8601. في هذا النظام، تبدأ الأسابيع يوم الاثنين، وتُرقَّم من 01 للأسبوع الأول حتى 52 أو 53 للأسبوع الأخير. الأسبوع 1 هو أول أسبوع تقع فيه أربعة أيام أو أكثر ضمن السنة الجديدة (أو، بشكل مترادف، الأسبوع 01 هو: أول أسبوع من السنة يحتوي على يوم الخميس؛ أو الأسبوع الذي يحتوي على 4 يناير). عندما يقع ثلاثة أيام أو أقل من الأسبوع التقويمي الأول للسنة الجديدة ضمن تلك السنة، فإن نظام ISO 8601 القائم على الأسبوع يعد تلك الأيام جزءًا من الأسبوع 52 أو 53 من السنة السابقة. على سبيل المثال، 1 يناير 2010 هو يوم جمعة، مما يعني أن ثلاثة أيام فقط من ذلك الأسبوع التقويمي تقع في 2010. وبالتالي، يعتبر نظام ISO 8601 القائم على الأسبوع هذه الأيام جزءًا من الأسبوع 53 (%V) من عام 2009 (%G)؛ يبدأ الأسبوع 01 من عام ISO 8601 2010 يوم الاثنين، 4 يناير 2010. وبالمثل، يُعتبر أول يومين من يناير 2011 جزءًا من الأسبوع 52 من عام 2010.
يوفر glibc بعض الامتدادات لمواصفات التحويل. (لم تُحدَّد هذه الامتدادات في POSIX.1-2001، لكن بعض الأنظمة الأخرى توفر ميزات مشابهة.) بين الحرف '%' وحرف محدد التحويل، يمكن تحديد علامة اختيارية وعرض حقل width. (تسبق هذه المُعدِّلات E أو O، إن وُجدت.)
يُسمح بأحرف العلامة التالية:
يمكن أن يتبع العلامة (التي قد تكون غائبة) محدد عرض عشري اختياري. إذا كان الحجم الطبيعي للحقل أصغر من هذا العرض، فتُحشى سلسلة المحارف الناتجة (على اليسار) إلى العرض المحدد.
إذا تجاوزت سلسلة المحارف الناتجة max بايت، لا يُضبط errno. هذا يجعل من المستحيل التمييز بين حالة الخطأ هذه والحالات التي تنتج فيها سلسلة محارف التنسيق بشكل شرعي سلسلة محارف ناتجة بطول صفري. لا يحدد POSIX.1-2001 أي إعدادات errno لـ strftime().
تشتكي بعض الإصدارات المعيبة من gcc(1) من استخدام %c: تحذير: `%c' يُنتج آخر رقمين فقط من السنة في بعض الإعدادات المحلية. بالطبع يُشجَّع المبرمجون على استخدام %c، لأنه يُعطي التمثيل المفضل للتاريخ والوقت. يُواجه المرء جميع أنواع الإبهامات الغريبة لتجاوز مشكلة gcc(1) هذه. أحد الحلول النظيفة نسبيًا هو إضافة دالة وسيطة
size_t
my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
{
return strftime(s, max, fmt, tm);
}
في الوقت الحالي، يوفر gcc(1) الخيار -Wno-format-y2k لمنع التحذير، لذا لم يعد الحل البديل أعلاه مطلوبًا.
تنسيق تاريخ متوافق مع RFC 2822 (مع بيئة محلية إنجليزية لـ %a و %b)
"%a, %d %b %Y %T %z"
تنسيق تاريخ متوافق مع RFC 822 (مع بيئة محلية إنجليزية لـ %a و %b)
"%a, %d %b %y %T %z"
يمكن استخدام البرنامج أدناه للتجربة مع strftime().
بعض الأمثلة لسلسلة النتيجة المنتجة بواسطة تطبيق glibc لـ strftime() هي كما يلي:
$ ./a.out '%m' Result string is "11" $ ./a.out '%5m' Result string is "00011" $ ./a.out '%_5m' Result string is " 11"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int
main(int argc, char *argv[])
{
char outstr[200];
time_t t;
struct tm *tmp;
if (argc != 2) {
fprintf(stderr, "Usage: %s: <format-string>\n", argv[0]);
exit(EXIT_FAILURE);
}
t = time(NULL);
tmp = localtime(&t);
if (tmp == NULL) {
perror("localtime");
exit(EXIT_FAILURE);
}
if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
fprintf(stderr, "strftime returned 0");
exit(EXIT_FAILURE);
}
printf("Result string is \"%s\"\n", outstr);
exit(EXIT_SUCCESS);
}
date(1), time(2), ctime(3), nl_langinfo(3), setlocale(3), sprintf(3), strptime(3)
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.