Some restrictions apply. 6!:0 'date: YYYY-MM-DD time: hh:mm:ss' date: 2014-03-02 ti1e: 09:4m:07
On Sun, Mar 2, 2014 at 8:38 AM, Roger Hui <rogerhui.can...@gmail.com> wrote: > Some people have sworn that they'd never use the 6!:0 with a non-empty > argument, but you can use it to do what you asked for: > > 6!:0 'YYYY-MM-DDThh:mm:ss' > 2014-03-02T07:36:21 > > > > > On Sun, Mar 2, 2014 at 1:04 AM, Raul Miller <rauldmil...@gmail.com> wrote: > > > Given > > 6!:0'' > > 2014 3 2 3 30 46.034 > > > > I'd like to generate the string > > 2014-03-02T03:30:46 > > > > And, to make things just a bit strange, I'd like to use 8!:2 instead of > the > > obvious. > > > > Just to be clear, though, here's my idea of "obvious": > > > > }:;(1,5#3)<@}."_1'--T:: ',.~":,.10000+<.6!:0'' > > > > By obvious, I do not mean that I instantly thought of that expression, I > > had to think a few minutes, and I had a few errors to fix in my initial > > concept. But by "obvious" I mean that I am using the basic J vocabulary. > > > > Picking up the vocabulary isn't instant, though, and I'm using 14 > different > > words from the vocabulary (plus some nouns and a pair of parenthesis). So > > if we expect a person to pick up five words from the vocabulary a week, > > that's at least three weeks of training before a person could be > reasonably > > comfortable composing a sentence like that. > > > > Now... the 8!:0, 8!:1 and 8!:2 verbs do have their own tiny vocabulary as > > represented by their format strings. But these are examples of extremely > > specialized words - not very powerful at all, which means they require > less > > study than J as a whole, and (within their limited capabilities) will > tend > > to be faster that a more general approach. > > > > Formatting is not likely a speed bottleneck for iso date formatting - > it's > > more when you have a big sheet of numbers and a weak computer that you > > might care about formatting time. But it's still an interesting exercise. > > (Or a boring one, if you are not interested in formatting text.): > > > > So... here's how I approached this exercise: > > > > <.2014 3 2 3 30 46.034 > > 2014 3 2 3 30 46 > > > > Let's just ignore the decimal part, for now. > > > > '4' 8!:2 <.2014 3 2 3 30 46.034 > > 2014.00003.00002.00003.000030.000046.0000 > > > > Looks like a number by itself is decimal places after the decimal point. > > > > '4.' 8!:2 <.2014 3 2 3 30 46.034 > > 2014 3 2 3 30 46 > > > > But a decimal point in the format specifier fixes that. > > '4.,2.,2.,2.,2.,2.' 8!:2 <.2014 3 2 3 30 46.034 > > 2014 3 2 33046 > > > > I need commas to separate the format specifiers for independent columns. > > > > '4.,r<0>2.,2.,2.,2.,2.' 8!:2 <.2014 3 2 3 30 46.034 > > 201403 2 33046 > > > > The r option gives "fill" or, in this context "leading zeros", but each > > format needs this spec. > > > > '4.,r<0>2.,r<0>2.,r<0>2.,r<0>2.,r<0>2.' 8!:2 <.2014 3 2 3 30 46.034 > > 20140302033046 > > > > Getting bulky, but now all my two digit numbers can have leading zeros. I > > could get fancy here, and use J to build the format specifier, but that's > > premature, watch: > > > > '4.,p<->r<0>2.,p<->r<0>2.,p<T>r<0>2.,p<:>r<0>2.,p<:>r<0>2.' 8!:2 > <.2014 > > 3 2 3 30 46.034 > > 2014-3-2T3**** > > > > Here, I've added a prefix for each number, to get the various separators. > > Unfortunately, I forgot to widen each column to make things fit. > > > > '4.,p<->r<0>3.,p<->r<0>3.,p<T>r<0>3.,p<:>r<0>3.,p<:>r<0>3.' 8!:2 > <.2014 > > 3 2 3 30 46.034 > > 20140-30-20T3:30:46 > > > > That's... better ,but now we can see that the concept of fill interacts > > badly with the concept of using a prefix, so let's try using a suffix > > instead: > > 's<->4.,s<->r<0>3.,s<T>r<0>3.,s<:>r<0>3.,s<:>r<0>3.,r<0>3.' 8!:2 > <.2014 > > 3 2 3 30 46.034 > > |domain error > > > > Oops, suffix is a q, not an s. > > > > 8!:2<.2014 3 2 3 30 46.034 > > 'q<->4.,q<->r<0>3.,q<T>r<0>3.,q<:>r<0>3.,q<:>r<0>3.,r<0>3.' 8!:2 > <.2014 > > 3 2 3 30 46.034 > > ****03-02T03:30:046 > > > > Almost done but I need to adjust my column widths again. > > > > 'q<->5.,q<->r<0>3.,q<T>r<0>3.,q<:>r<0>3.,q<:>r<0>3.,r<0>2.' 8!:2 > <.2014 > > 3 2 3 30 46.034 > > 2014-03-02T03:30:46 > > > > Done. > > > > And, that's not actually a whole lot more verbose than the other > > expression. > > > > It's tempting to think about making 8!:2 more powerful, but it's not > really > > about power - it's a specialized tool for a specialized task. If you want > > the full generality of J, it's available. > > > > Of course, if you really want an iso formatted timestamp, you could > always > > find another way to get that. Learning exercises necessarily restrict > > themselves in various ways. > > > > Also... http://en.wikipedia.org/wiki/ISO_8601 points out that the > standard > > really covers a lot of ground. And one thing we do not currently have in > J > > is a way of getting at what the operating system thinks is the time zone > of > > the user. That can matter if you are on a phone (where back a few decades > > ago, computers were a bit harder to carry). > > > > Thanks, > > > > -- > > Raul > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm